【问题描述】

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位整型。

【分析】

贪心。先将工作按截止时间排序。添加一个时间在0时间,且截止时间为0利润为0,维护一个时间和堆。初始状态下,时间设为极大值。只要当前时间大于当前事件的截止时间,便取出堆顶,利润增加,时间减一。再让时间等于当前事件的截止时间,把当前事件的利润加入堆。

详见代码。

顺便一提,c++可以直接用priority_queue做大根堆,就省打了很多。

【代码】

//bzoj1572(lydsy)
//usaco 09 open
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;priority_queue<long long, vector<long long> >q;struct apair
{int d;int  p;
}a[100050];bool operator < (const apair& lhs,const apair& rhs)
{return lhs.d < rhs.d;}int n;
int main()
{freopen("job.in","r",stdin);freopen("job.out","w",stdout);cin >> n;for (int i = 1; i <= n; i ++)scanf("%d %d",&a[i].d,&a[i].p);a[++n].d = 0;a[n].p = 0;sort(a + 1,a + n +1);long long ans = 0;long long now = 1000000000;for (int i = n; i > 0; i--){while (now > a[i].d && q.size() > 0){now--;ans += q.top();q.pop();}now = a[i].d;q.push(a[i].p);}cout << ans << endl;fclose(stdin);fclose(stdout);
}

转载于:https://www.cnblogs.com/N-C-Derek/archive/2012/07/11/usaco_09_open_job.html

【BZOJ1572】【usaco 2009 open】工作安排job相关推荐

  1. 2009年度工作安排计划

    中国工程建设标准化协会信息通信专业委员会 数据中心工作组 2009年度工作安排计划 1.GB50174<电子信息系统机房设计规范>技术贯标研讨会     根据颁布的国家标准GB50174& ...

  2. 【bzoj1572】[Usaco2009 Open]工作安排Job 贪心+堆

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

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

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

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

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

  5. NKOI 1349 工作安排

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

  6. 综合布线工作组2009年工作简报

    中国工程建设标准化协会信息通信专业委员会 建标信通字[2009] 06号   综合布线工作组2009年工作简报 为了积极推动综合布线行业技术创新和技术进步,进一步提高综合布线工程设计水平和施工质量,中 ...

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

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

  8. 综合布线工作组2008年上半年技术课题工作安排会议通知

    中国工程建设标准化协会信息通信专业委员会   建标信通字[2008] 02号 综合布线工作组2008年上半年技术课题工作安排会议通知   各工作组成员 中国工程建设标准化协会信息通信专业委员会综合布线 ...

  9. 2010年上半年计算机专业技术资格考试工作安排

      2010年上半年计算机专业技术资格考试工作安排<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:o ...

  10. 【BZOJ2245】[SDOI2011]工作安排 拆边费用流

    [BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...

最新文章

  1. Python初学问题-if/else的运用
  2. 13.multi-term-vector请求
  3. Java 的Runnable和Callable的区别
  4. 组策略系列之四:《精典放送:组策略管理20点》
  5. IP,IP地址,mac地址
  6. Javascript学习之创建对象
  7. 转Java 开发环境配置
  8. 破解vysor为专业版
  9. 行政区划代码(道路要素)
  10. 北京大学计算机学院刘利,信息科学学院 科研动态 深化新文科计算机教学改革,实施分类分层次教学体系研讨会在京召开...
  11. PHP、TP5生成下载word
  12. win10备份(win10备份的系统怎么还原)
  13. Android之简单本地音乐播放器
  14. JS处理JSON字符串转数组,数字超17为处理方法
  15. nginx 如何查看访问ip和对应访问路径
  16. 禁止迅雷极速版强制升级为最新迅雷版本的方法,最简单,最有效!
  17. 线控转向,包含设计说明书,carsim模型,MATLAB Simulink模型全套(工程项目线上支持)
  18. 车间调度建模系列9|复杂车间调度问题建模实例
  19. 主机托管的优势及挑战
  20. wsl2 (Windows Subsystem for Linux)使用学习

热门文章

  1. python-常见数据类型及其方法
  2. 【文字检测算法整理】
  3. java源码之HashMap和HashTable的异同
  4. thinkphp隐藏后台地址
  5. shell 读取文件
  6. eclipse下使用maven配置库托管jar包
  7. Windows Phone 7范例游戏Platformer实战5——多点触控编程
  8. 我来做百科(第六天)
  9. 【Linux】rpm常用命令及rpm参数介绍
  10. 微信朋友圈:应对春节千亿访问量背后的故事