【bzoj1572】[Usaco2009 Open]工作安排Job 贪心+堆
题目描述
Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间。 他的工作日从0时刻开始,有1000000000个单位时间(!)。在任一时刻,他都可以选择编号1~N的N(1 <= N <= 100000)项工作中的任意一项工作来完成。 因为他在每个单位时间里只能做一个工作,而每项工作又有一个截止日期,所以他很难有时间完成所有N个工作,虽然还是有可能。 对于第i个工作,有一个截止时间D_i(1 <= D_i <= 1000000000),如果他可以完成这个工作,那么他可以获利P_i( 1<=P_i<=1000000000 ). 在给定的工作利润和截止时间下,FJ能够获得的利润最大为多少呢?答案可能会超过32位整型。
输入
第1行:一个整数N. 第2~N+1行:第i+1行有两个用空格分开的整数:D_i和P_i.
输出
输出一行,里面有一个整数,表示最大获利值。
样例输入
3
2 10
1 5
1 7
样例输出
17
题解
贪心
原本以为是按照p从大到小排序,结果发现这样做的话代码没法写。
于是改变策略,按d从小到大排序。
每次找到一个工作以后,看时间能否满足。
如果能,就选它,把它加到小根堆中,并把时间+1.
若不能,就看堆中最小元素是否比p要小,如果是,则删除那个元素,再添加当前元素。
由于priority_queue默认是大根堆,所以我把p取相反数后再加进堆中,就变成小根堆了。
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long lint;
struct data
{int d;lint p;
}a[100010];
priority_queue<lint> q;
bool cmp(data a , data b)
{return a.d < b.d;
}
int main()
{int n , i , now = 0;lint x , ans = 0;scanf("%d" , &n);for(i = 1 ; i <= n ; i ++ )scanf("%d%lld" , &a[i].d , &a[i].p);sort(a + 1 , a + n + 1 , cmp);for(i = 1 ; i <= n ; i ++ ){if(now < a[i].d)q.push(-a[i].p) , ans += a[i].p , now ++ ;else{x = -q.top();if(x < a[i].p){q.pop();ans -= x;q.push(-a[i].p);ans += a[i].p;}}}printf("%lld\n" , ans);return 0;
}
转载于:https://www.cnblogs.com/GXZlegend/p/6412550.html
【bzoj1572】[Usaco2009 Open]工作安排Job 贪心+堆相关推荐
- [BZOJ1572][Usaco2009 Open]工作安排Job
1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1351 Solved: 632 [Sub ...
- bzoj1572 [Usaco2009 Open]工作安排Job
[Usaco2009 Open]工作安排Job Time Limit: 10 Sec Memory Limit: 64 MB Description Farmer John 有太多的工作要做啊!!!! ...
- [BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)
传送门 把任务按照d排序 一次加入到堆中,如果当前放不进堆中,并且比堆中最小的大, 就从堆中弹出一个数,再把当前的数放进去 #include <queue> #include <cs ...
- 【BZOJ】1572: [Usaco2009 Open]工作安排Job
[题意]给定n项工作的截止时间和价值,每项工作需要1单位时间完成,求最大价值.n<=10^5. [算法]贪心+堆 [题解] 如果是访问到x时将d[x]前的点从价值最大的能加就加是错误的贪心,因为 ...
- bzoj 1572: [Usaco2009 Open]工作安排Job
Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单 ...
- [Usaco2009 Open]工作安排Job
Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1457 Solved: 687 [Submit][Status][Discuss] Descript ...
- 工作安排(反悔贪心板子题)
工作安排 - 题目 - Daimayuan Online Judge 分析: 贪心,将set当链表用 从后往前考虑(这样先入队的就一直能到最后),碰到更小的时刻,就将之前入队的 能出的全出 #incl ...
- NKOI 1349 工作安排
[UASCO 2009 OPEN GOLD-2]工作安排 Time Limit:10000MS Memory Limit:65536K Total Submit:63 Accepted:43 Ca ...
- 麦肯锡顾问深度工作安排:将工作可视化
工作表安排的三个步骤 凡是善于工作的人,都有一个共通的方法,那就是他们能够有意识或者无意识地使自己的整体工作可视化. 商业系统型的工作安排法: 流程:为了创造价值明确工作的整体流程 分解:将整体流程分 ...
最新文章
- FuncT、ActionT 的区别于说明
- 一键实现变老变年轻——Windows 10 下部署PaddleGAN,带你感受从年少到白头的浪漫
- UIButton 的 imageEdgeInsets 和 titleEdgeInsets
- 【ubuntu】解决窗口管理器 不支持透明问题(11.04之前版本不支持)
- 使用ulimit设置文件最大打开数
- ios did receive memory warning
- OpenCV之cvSmooth函数平滑滤波
- 靠谱测试人员需具备沟通表达能力
- python图片拼接
- CH14 Android中的多媒体
- AD中画PCB详细流程
- Mac配置Android开发环境
- java visual foxpro_从Java访问Visual FoxPro数据库
- vue中在哪个生命周期中dom被渲染_Vue生命周期说明
- python爬虫模拟登录学校教务系统(青果教务系统)并查询个人成绩
- 罗辑思维2017-2018跨年演讲摘要
- 班德瑞1-9,神秘园1-4全集下载
- [京喜]卡红包实现真正0.01买东西
- Android GPS中间层驱动开发调试
- UFUNufun币ufun优趣集团
热门文章
- Codeforces Round #350 (Div. 2) B. Game of Robots 水题
- 笔记05 局部类型
- 阮一峰:炫耀从来不是我的动机,好奇才是
- 关于CAS服务器磁盘占用的问题,锁定目录惹的祸
- BDD测试利器:mocha+should.js
- 远东传动收购机器人_一张图为你总结最近5年在机器人领域收购案例
- python如何并发上千个get_Python拓展21(python3X之百万并发借鉴)
- spring图片转视频_视频转GIF在线教程,GIF制作方法
- android capitalize,How to capitalize every letter in an Android EditText?
- Python机器学习:KNN算法之01KKN基础