E - Complete the Projects (easy version)

Posted yishuda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了E - Complete the Projects (easy version)相关的知识,希望对你有一定的参考价值。

传送门

题意:

Polycarp开始接手项目,他有一个初始等级值r。每一个项目需要至少a级别才能接手,完成后可以获得b(可能是负数)等级的加成。现在有n个项目等待Polycarp去完成。问在符合要求的情况下,Polycarp能不能做完全部项目。注意Polycarp的等级值不允许出现负值。

思路:

我们可以用贪心策略来解决这个问题。首先我们先把n个项目根据等级加成b的不同分成 非负和 负数 两大类。 非负类可以使等级稳定增加,负数类可以使等级稳定减少。 首先我们考虑非负数类,为了满足每个项目都有等级要求,我们只需要把这些非负数类按照 a 从小到大排序即可,其次我们考虑负数类。我们要按照a+b的大小 从大到小排序----- 因为如果我们接手一个负数类项目,我们就会降级 ,我们要从最高级一点一点下降,a+b暂且可以看作是接完一个项目后的等级。

 

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,r;
struct node{
	int a,b;
};
node f[110];

bool cmp(node x, node y){
	if(x.b>=0&&y.b>=0) return x.a<y.a;
	else if(x.b<0&&y.b<0) return x.a+x.b>y.a+y.b;
	else return x.b>y.b;
}
int main(){
	cin>>n>>r;
	for(int i=1; i<=n; i++)	cin>>f[i].a>>f[i].b;
	sort(f+1, f+1+n, cmp);
	for(int i=1;i<=n;i++){
		if(r<f[i].a) {
			cout<<"NO"<<endl;
			return 0;
		}
		r+=f[i].b;
	}
	if(r<0) cout<<"NO"<<endl;
	else cout<<"YES"<<endl;
} 

  

 

以上是关于E - Complete the Projects (easy version)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1203F2 Complete the Projects (hard version)

Codeforces 1203F1 Complete the Projects (easy version)

CodeforcesF2. Complete the Projects (hard version) (贪心+贪心+01背包)

Codeforces 1203F2 Complete the Projects (hard version)(dp)

Find the Minimum length Unsorted Subarray, sorting which makes the complete array sorted

HDU 1121 Complete the Sequence 差分