贪心

后悔操作的实现

Problem - C1 - Codeforces

Problem - C2 - Codeforces

in

6
4 -4 1 -3 1 -3

out

5

给出 一个数组

题目让你求出在所加的值不小于0的情况下求出最多可选的数

限制:只能从左往右选

反悔操作的实现

利用优先队列,每当眼前解优于之前的解时,便可以抛弃原先的解选择当前解

key code

const int N=2010;
int n,m,k,a[N],b[N],p[N];
void solve(){
	//try it again.
	cin>>n;
	up(1,n)cin>>a[o];
	priority_queue<int>q;
	int res=0,cur=0;
	up(1,n){
		if(a[o]>=0){
			cur+=a[o];
			res++;
		}
		else{
			if(cur+a[o]>=0){
				res++;
				cur+=a[o];
				q.push(-a[o]);
			}
			else if(!q.empty()&&q.top()>-a[o]){
				cur+=a[o]+q.top();
				q.pop();
				q.push(-a[o]);
			}
		}
	}
	cout<<res;
}
posted @ 2023-01-17 19:37  liangqianxing  阅读(37)  评论(0)    收藏  举报