码迷,mamicode.com
首页 > 其他好文 > 详细

E - Complete the Projects (easy version)

时间:2020-05-28 01:04:56      阅读:28      评论:0      收藏:0      [点我收藏+]

标签:let   不同   net   car   出现   获得   cin   int   情况下   

传送门

题意:

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)

标签:let   不同   net   car   出现   获得   cin   int   情况下   

原文地址:https://www.cnblogs.com/yishuda/p/12977527.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!