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;
}
posted @ 2025-04-13 15:48  hsr_ray  阅读(14)  评论(0)    收藏  举报