
一开始想的是DP,然后想一下,其实可以一直摆,然后等到某一天不够的时候,放弃之前摆的能卷的尽量多的一天就行了,用一个最大堆
- #include
- using namespace std;
- typedef long long ll;
- typedef pair<int,int>PII;
- const int N=1e5+10;
- int T;
- priority_queue
>heap; - int t[N],a[N],b[N];
- ll sum1,sum2;
-
- void solve()
- {
- int n;
- cin>>n;
-
- for(int i=1;i<=n;i++){
- cin>>t[i]>>a[i]>>b[i];
- sum1+=t[i];
- sum2+=a[i];
- if(sum1>=sum2){
- puts("-1");
- return;
- }
- }
-
-
- sum1 = 0;
- sum2 = 0;
- for(int i=1;i<=n;i++){
- sum1+=t[i];
- sum2+=b[i];
- heap.push({a[i]-b[i],i});
-
- while(sum2
- //printf("gaga%d\n",i);
- int ver = heap.top().second;
- sum2-=b[ver];
- sum2+=a[ver];
- heap.pop();
- }
-
- }
-
- cout<
size(); -
-
-
- }
-
-
- int main()
- {
- T = 1;
- while(T--){
- solve();
- }
- }