题目描述

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 贪心+堆相关推荐

  1. [BZOJ1572][Usaco2009 Open]工作安排Job

    1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1351  Solved: 632 [Sub ...

  2. bzoj1572 [Usaco2009 Open]工作安排Job

    [Usaco2009 Open]工作安排Job Time Limit: 10 Sec Memory Limit: 64 MB Description Farmer John 有太多的工作要做啊!!!! ...

  3. [BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)

    传送门 把任务按照d排序 一次加入到堆中,如果当前放不进堆中,并且比堆中最小的大, 就从堆中弹出一个数,再把当前的数放进去 #include <queue> #include <cs ...

  4. 【BZOJ】1572: [Usaco2009 Open]工作安排Job

    [题意]给定n项工作的截止时间和价值,每项工作需要1单位时间完成,求最大价值.n<=10^5. [算法]贪心+堆 [题解] 如果是访问到x时将d[x]前的点从价值最大的能加就加是错误的贪心,因为 ...

  5. bzoj 1572: [Usaco2009 Open]工作安排Job

    Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单 ...

  6. [Usaco2009 Open]工作安排Job

    Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1457  Solved: 687 [Submit][Status][Discuss] Descript ...

  7. 工作安排(反悔贪心板子题)

    工作安排 - 题目 - Daimayuan Online Judge 分析: 贪心,将set当链表用 从后往前考虑(这样先入队的就一直能到最后),碰到更小的时刻,就将之前入队的 能出的全出 #incl ...

  8. NKOI 1349 工作安排

    [UASCO 2009 OPEN GOLD-2]工作安排 Time Limit:10000MS  Memory Limit:65536K Total Submit:63 Accepted:43  Ca ...

  9. 麦肯锡顾问深度工作安排:将工作可视化

    工作表安排的三个步骤 凡是善于工作的人,都有一个共通的方法,那就是他们能够有意识或者无意识地使自己的整体工作可视化. 商业系统型的工作安排法: 流程:为了创造价值明确工作的整体流程 分解:将整体流程分 ...

最新文章

  1. FuncT、ActionT 的区别于说明
  2. 一键实现变老变年轻——Windows 10 下部署PaddleGAN,带你感受从年少到白头的浪漫
  3. UIButton 的 imageEdgeInsets 和 titleEdgeInsets
  4. 【ubuntu】解决窗口管理器 不支持透明问题(11.04之前版本不支持)
  5. 使用ulimit设置文件最大打开数
  6. ios did receive memory warning
  7. OpenCV之cvSmooth函数平滑滤波
  8. 靠谱测试人员需具备沟通表达能力
  9. python图片拼接
  10. CH14 Android中的多媒体
  11. AD中画PCB详细流程
  12. Mac配置Android开发环境
  13. java visual foxpro_从Java访问Visual FoxPro数据库
  14. vue中在哪个生命周期中dom被渲染_Vue生命周期说明
  15. python爬虫模拟登录学校教务系统(青果教务系统)并查询个人成绩
  16. 罗辑思维2017-2018跨年演讲摘要
  17. 班德瑞1-9,神秘园1-4全集下载
  18. [京喜]卡红包实现真正0.01买东西
  19. Android GPS中间层驱动开发调试
  20. UFUNufun币ufun优趣集团

热门文章

  1. Codeforces Round #350 (Div. 2) B. Game of Robots 水题
  2. 笔记05 局部类型
  3. 阮一峰:炫耀从来不是我的动机,好奇才是
  4. 关于CAS服务器磁盘占用的问题,锁定目录惹的祸
  5. BDD测试利器:mocha+should.js
  6. 远东传动收购机器人_一张图为你总结最近5年在机器人领域收购案例
  7. python如何并发上千个get_Python拓展21(python3X之百万并发借鉴)
  8. spring图片转视频_视频转GIF在线教程,GIF制作方法
  9. android capitalize,How to capitalize every letter in an Android EditText?
  10. Python机器学习:KNN算法之01KKN基础