标签: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