P9207 灭罪「正直者之死」

P9207 灭罪「正直者之死」

贪心。

因为要取的和尽可能多,那么就是要求每一步取得和尽可能小。

考虑对正数和负数分组,排序。每次先取正数,取到不能再取为止,然后再取负数,这样就可以降小这个值,一直到极限为止。不断重复这一过程,直到不能取为止。

#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
int a[N],b[N];
bool cmp(int x,int y){
	return x>y;
}
int main()
{
	int n,k,p=0,q=0,now=0,last1=1,last2=1;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		if(x<0)	p++,a[p]=x;
		else	q++,b[q]=x;
	}
	sort(a+1,a+p+1,cmp),sort(b+1,b+q+1);
	while(1){
		bool f=false;
		for(int i=last1;i<=p;i++)
			if(now+a[i]>=-pow(2,k-1))	f=true,now+=a[i],last1=i+1;
		for(int i=last2;i<=q;i++)	
			if(now+b[i]<pow(2,k-1))	f=true,now+=b[i],last2=i+1;
		if(f==false)	break;
	}
	cout<<last1+last2-2<<endl;
	return 0;
}
posted @   June_Failure  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示