P9228 原神 题解
分析
明明显显的贪心啊。注意叠词(
题目背景是一堆废话,没必要看。
为了使伤害最大,我们需要尽可能的使打出的攻击满足后两个规则。同时,我们还需要优先考虑大的
优先看规则二,我们从最大的
为了更好理解,我们继续分析。题目要求将
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+100000;
bool cmp(int a,int b){return a>b;}
int n,m,k;
int a[N],b[N];
int ans,kk;
signed main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++) cin>>a[i],ans+=a[i];
for(int i=1;i<=m;i++) cin>>b[i],ans+=b[i];//求和
sort(a+1,a+n+1,cmp);//贪心思路排序
int minn=min(n,m);//这里一定是最小值
for(int i=1;i<=minn;i++) if(a[i]>k) ans+=a[i],kk++;//规则二更优
ans+=k*(minn-kk);//剩下的全部运用规则三
return cout<<ans,0;
}
感谢 @seanlsy 大佬提出的改进方案。