标签:ide blocks else lin std http bzoj1029 gif return
贪心。。。
按照T2来进行排序,用堆来进行维护。循环一遍,如果循环时间加上已用时间不超过截止时间,那就ANS++。否则,将它与堆顶判断,如果小于堆顶就把堆顶踢出,把它加入。
1 #include<cstdio> 2 #include<algorithm> 3 #include<queue> 4 using namespace std; 5 const int maxn=150010; 6 struct data{ 7 int la,e; 8 }a[maxn]; 9 int n; 10 priority_queue <int> que; 11 bool cmp(const data &x,const data &y){ 12 return x.e<y.e; 13 } 14 int main(){ 15 scanf("%d",&n); 16 for (int i=1; i<=n; i++) scanf("%d%d",&a[i].la,&a[i].e); 17 sort(a+1,a+n+1,cmp); 18 long long now=0,ans=0; 19 for (int i=1; i<=n; i++){ 20 int last=a[i].la; 21 int en=a[i].e; 22 if (now+last<=en){ 23 ans++; 24 now+=last; 25 que.push(last); 26 } 27 else { 28 int tmp=que.top(); 29 if (tmp>last){ 30 que.pop(); 31 now=now-tmp+last; 32 que.push(last); 33 } 34 } 35 } 36 printf("%d\n",ans); 37 return 0; 38 }
标签:ide blocks else lin std http bzoj1029 gif return
原文地址:http://www.cnblogs.com/Robinson828/p/6091634.html