NKOJ 5235 游戏得分
NKOJ 5235 游戏得分
思路:贪心
实现方法
- 看完题后,第一想法就是简单的贪心,所有特殊关全部使得分翻倍,但仔细一想就发现有反例,如
3 2
1 2 5
2 3
在这组样例中,如果全部采用翻倍,答案只有 \(4\) ,但是正确答案是 \((5+1)\times 2=12\) 。
- 所以将特殊关从大到小排序,排完后考虑每一关是要 \(\times 2\) 还是 \(+arr_i\)
代码
#include<cstdio>
#include<algorithm>
#define int long long
using namespace std;
int n,ans=0,m;
int arr[105];
int brr[105];
bool cmp(int x,int y){return x>y;}
signed main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++) scanf("%lld",&arr[i]),ans+=arr[i];
for(int i=1;i<=m;i++){
int x;
scanf("%lld",&x);
brr[i]=arr[x];
ans-=arr[x];
}
sort(brr+1,brr+1+m,cmp);
for(int i=1;i<=m;i++){
ans=max(ans*2,ans+brr[i]);
}
printf("%lld",ans);
return 0;
}