您的位置:首页 > 游戏 > 手游 > 深圳信息网_文档下载免费网站_王通seo教程_今天重大新闻国内最新消息

深圳信息网_文档下载免费网站_王通seo教程_今天重大新闻国内最新消息

2024/12/23 8:51:46 来源:https://blog.csdn.net/daihaoweikevin/article/details/143217430  浏览:    关键词:深圳信息网_文档下载免费网站_王通seo教程_今天重大新闻国内最新消息
深圳信息网_文档下载免费网站_王通seo教程_今天重大新闻国内最新消息

贪心是信息学竞赛常考内容,一般来说为选择当前情况下最优情况的算法,非常好写,但部分贪心题目无法使用普通贪心解决,在这些题目中就有一类为反悔贪心。

反悔贪心经常会用到堆来为主答案,例题:
Work Scheduling G
本题很容易发现可以使用贪心来解决,具体地,我们将读入的数据按照 T 2 T2 T2 从小到大排序,然后遍历一遍,然后先把所需要的时间加到 s u m sum sum 中然后将这次所用的时间放入一个大根堆中,然后判断 s u m sum sum 是否大于当前的 T 2 T2 T2 如果小于那么直接修理建筑 a n s + + ans++ ans++,否则就体现出反悔贪心的精髓了,我们把大根堆堆顶的数删去,然后从 s u m sum sum 中减去大顶堆中的数(所需时间),因为大顶堆顶的数是最大的,所以减去后可以省下最多的时间,及之后可以修更多的建筑。

由此获得 Code

#include<bits/stdc++.h>
using namespace std;
struct node{int t1,t2;
}a[150005];
bool cmp(node x,node y)
{return x.t2<y.t2;
}
long long n,ans,sum;
priority_queue<int> q;
signed main()
{cin>>n;for(int i=1;i<=n;i++)cin>>a[i].t1>>a[i].t2;sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++){sum+=a[i].t1;q.push(a[i].t1);if(sum<=a[i].t2)ans++;else{sum-=q.top();q.pop();}}cout<<ans<<"\n";return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com