http://hihocoder.com/problemset/problem/1309

题目大意是给定n个任务的起始时间,求问最少需要多少台机器。

有一个贪心的策略就是,如果说对于一个任务结束,必然接一个开始时间最接近这个的比较合算。我们假想一个任务池,那么任务池中最早结束的那个,必然接剩余任务中最早开始的比赛合算(相同开始时间最早结束),而且假设这个任务是P,那么对于一个结束时间晚于P的任务,显然后面的一段时间是浪费的,同样对于一个开始时间晚于P的任务,前面一段是浪费的;

关键在于某个开始时间晚于P,但是结束时间早于P的任务Q,假设接上Q后,还能接一个X,但是接上P后,无法接上X。

首先,对于接P的情况,会导致Q和X,无法接上,或许需要重开一个机器,或者是任务池中存在另一个任务可以接上。对于接Q的情况,会导致P,无法接上,或许需要重开一个机器,或许任务池中存在一个任务可以接上。

对于需要重开一个机器的情况,两者的效果是等价的。那么假设,接Q的情况,任务池中存在另一个任务可以接P,必然,对于接P的情况,存在同样的任务可以接Q,因为P的开始时间早于Q,那么此情况下,两者亦是等价的。

所以,综上,剩余任务中最早开始的比赛合算(相同开始时间最早结束)。

于是只需要开始对所有任务按开始时间正序,次按结束时间正序排序。然后用一个优先队列(堆)维护任务池即可。

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <string>
#define LL long longusing namespace std;const int maxN = 100005;
struct node
{int s, e;
}a[maxN];bool cmp(node x, node y)
{if (x.s != y.s) return x.s < y.s;else return x.e < y.e;
}int n;void work()
{priority_queue<int, vector<int>, greater<int> > q;q.push(0);int k;for (int i = 0; i < n; ++i){k = q.top();q.pop();if (k <= a[i].s) q.push(a[i].e);else q.push(a[i].e), q.push(k);}printf("%d\n", q.size());
}int main()
{//freopen("test.in", "r", stdin);//freopen("test.out", "w", stdout);while (scanf("%d", &n) != EOF){for (int i = 0; i < n; ++i)scanf("%d%d", &a[i].s, &a[i].e);sort(a, a+n, cmp);work();}return 0;
}

View Code

转载于:https://www.cnblogs.com/andyqsmart/p/5559593.html

ACM学习历程—HihoCoder1309任务分配(排序 贪心)相关推荐

  1. 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始

    以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告 转载于:https://www ...

  2. ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 题目大意就是把一段序列里面的数替换成f(x),然后让总和最大. 首先可以计算出初始的总和,以及每 ...

  3. ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. ...

  4. ACM学习历程—HDU2476 String painter(动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...

  5. ACM学习历程—HDU2068 RPG的错排(组合数学)

    Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...

  6. ACM学习历程—HDU5668 Circle(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5668 这题的话,假设每次报x个,那么可以模拟一遍, 假设第i个出局的是a[i],那么从第i-1个出局的人后,重新 ...

  7. ACM学习历程—HDU5666 Segment(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5666 这题的关键是q为质数,不妨设线段上点(x0, y0),则x0+y0=q. 那么直线方程则为y = y0/x ...

  8. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  9. ACM学习历程—Hihocoder 1290 Demo Day(动态规划)

    http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...

最新文章

  1. 硬解析优化_解析!解析!598元的山灵动圈耳机大杀器,横评对比心慌慌
  2. modernizr 支持html5,使用modernizr.js检测浏览器对html5以及css3的支持情况
  3. js导出的xlsx无法打开_js-xlsx实现文件导出、下载(excel)
  4. gdb调试的基本使用
  5. html5开发之ios屏幕适配,iOS开发屏幕尺寸以及屏幕适配等问题(转载内容)
  6. MAC 修改文件夹以及子文件夹和子文件权限 以及 修改文件夹owner
  7. Qt工作笔记-把文件逐行读到ListWidget中
  8. (76)Verilog HDL测试激励:时钟激励3
  9. vscode 推荐premiter_vscode 有哪些让人眼前一亮的插件?
  10. CentOS下安装SecureCRT的sz/rz工具包
  11. 语言基础(9):static, extern 和 inline
  12. SQLServer查询所有表所有字段包含xx的信息
  13. Centos 6.5-yum安装出现错误解决方案
  14. SQL SERVER日期函数详细用法
  15. 检查用户是否有访问权限
  16. mysql amd.dll 后门_DLL型后门原理及完全清除秘诀
  17. Java static关键字与静态块
  18. STM32使用SPI方式读写SD 卡
  19. “真香”是什么意思?
  20. ViewPager简单介绍(二)ViewPager+Fragment

热门文章

  1. Linux系统的启动引导过程(转)
  2. [导入]Myeclipse中XML不出智能提示
  3. 腾讯开源视频动作检测算法DBG,打破两项世界纪录!
  4. keil 快捷键_KEIL 那些编辑技巧与方法
  5. 工程院院士李国杰科学网发文称国内 AI 研究「顶不了天,落不了地」
  6. 重磅!全球Top 1000计算机科学家h指数公布:中国53位学者上榜!
  7. Hinton发布最新论文!表达神经网络中部分-整体层次结构
  8. Python编辑统一缩进(Pycharm)
  9. 大咖面对面 | 陈果果博士谈智能语音
  10. 一文初探Tensorflow高级API使用(初学者篇)