ACM学习历程—HihoCoder1309任务分配(排序 贪心)
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任务分配(排序 贪心)相关推荐
- 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始
以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告 转载于:https://www ...
- ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 题目大意就是把一段序列里面的数替换成f(x),然后让总和最大. 首先可以计算出初始的总和,以及每 ...
- ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. ...
- ACM学习历程—HDU2476 String painter(动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...
- ACM学习历程—HDU2068 RPG的错排(组合数学)
Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...
- ACM学习历程—HDU5668 Circle(数论)
http://acm.hdu.edu.cn/showproblem.php?pid=5668 这题的话,假设每次报x个,那么可以模拟一遍, 假设第i个出局的是a[i],那么从第i-1个出局的人后,重新 ...
- ACM学习历程—HDU5666 Segment(数论)
http://acm.hdu.edu.cn/showproblem.php?pid=5666 这题的关键是q为质数,不妨设线段上点(x0, y0),则x0+y0=q. 那么直线方程则为y = y0/x ...
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- ACM学习历程—Hihocoder 1290 Demo Day(动态规划)
http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...
最新文章
- 硬解析优化_解析!解析!598元的山灵动圈耳机大杀器,横评对比心慌慌
- modernizr 支持html5,使用modernizr.js检测浏览器对html5以及css3的支持情况
- js导出的xlsx无法打开_js-xlsx实现文件导出、下载(excel)
- gdb调试的基本使用
- html5开发之ios屏幕适配,iOS开发屏幕尺寸以及屏幕适配等问题(转载内容)
- MAC 修改文件夹以及子文件夹和子文件权限 以及 修改文件夹owner
- Qt工作笔记-把文件逐行读到ListWidget中
- (76)Verilog HDL测试激励:时钟激励3
- vscode 推荐premiter_vscode 有哪些让人眼前一亮的插件?
- CentOS下安装SecureCRT的sz/rz工具包
- 语言基础(9):static, extern 和 inline
- SQLServer查询所有表所有字段包含xx的信息
- Centos 6.5-yum安装出现错误解决方案
- SQL SERVER日期函数详细用法
- 检查用户是否有访问权限
- mysql amd.dll 后门_DLL型后门原理及完全清除秘诀
- Java static关键字与静态块
- STM32使用SPI方式读写SD 卡
- “真香”是什么意思?
- ViewPager简单介绍(二)ViewPager+Fragment