贪心。
先以t2为关键字排一下序,然后开一个堆记录一下当前的t1,乱搞。。
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <queue> 7 using namespace std; 8 9 priority_queue<int> q; 10 const int N=200000; 11 struct T{ 12 int t1,t2; 13 bool operator < (T b)const { 14 return t2<b.t2; 15 } 16 }t[N]; 17 int n,ans,now; 18 19 int main(){ 20 scanf("%d",&n); 21 for(int i=1;i<=n;i++) 22 scanf("%d%d",&t[i].t1,&t[i].t2); 23 sort(t+1,t+1+n); 24 for(int i=1;i<=n;i++){ 25 if(now+t[i].t1<=t[i].t2){ 26 now+=t[i].t1; 27 q.push(t[i].t1); 28 ans++; 29 }else if(q.size()){ 30 int tp=q.top(); 31 if(q.top()>t[i].t1&&t[i].t1+now<=t[i].t2+q.top()){ 32 now-=q.top()-t[i].t1; 33 q.pop(); 34 q.push(t[i].t1); 35 } 36 } 37 } 38 printf("%d\n",ans); 39 }