贪心。
先以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 }
本文深入探讨了贪心算法的原理与应用,通过具体的代码示例,详细讲解了如何使用贪心策略解决特定问题。文章首先介绍了算法的基本概念,随后通过一个实例展示了算法的具体实现过程,包括数据结构的选择、关键步骤的解析以及代码的运行流程。
2272

被折叠的 条评论
为什么被折叠?



