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