HDU 6180 Schedule【优先队列+模拟】
来源:互联网 发布:淘宝里同一款不同价格 编辑:程序博客网 时间:2024/06/05 19:19
题目链接
题意:有一些任务,要用一些机器去做这些任务,给出每个任务的开始时间和结束时间。一台机器最多只能同时做一个任务,并且机器关掉不能再开,求在使用最少机器的情况下,最少的机器个数和最短的运行时间。
拿两个优先队列模拟…贪心的找现在空着的机器中做完上个任务最晚的那个,这样才能让机器等的时间最少。
代码里有详细解释。
#include <bits/stdc++.h>using namespace std;typedef long long ll;int T;int N;ll cnt,sum;struct Work{ ll start,end;}work[100000+10];bool cmp(Work a,Work b){ if (a.start!=b.start) return a.start<b.start; else return a.end<b.end;}// 空闲序列其实表示的是所有已经开始运行但现在没有任务在运行的机器priority_queue < ll,vector<ll>,greater<ll> > working; // 小顶堆,工作机器序列priority_queue < ll,vector<ll>,less<ll> > notworking; // 大顶堆,空闲机器序列int main(){ // freopen("1.txt","r",stdin); scanf("%d",&T); while (T--){ while (!working.empty()) working.pop(); while (!notworking.empty()) notworking.pop(); cnt=0; sum=0; scanf("%d",&N); for (int i=1;i<=N;i++){ scanf("%lld %lld",&work[i].start,&work[i].end); } sort(work+1,work+N+1,cmp); for (int i=1;i<=N;i++){ // 从运行序列中找出所有比当前任务的开始时间早的 // 也就是在当前任务开始前就已经完成了的加入空闲集合 while (!working.empty()&&working.top()<=work[i].start){ ll tmp=working.top(); working.pop(); notworking.push(tmp); } // 如果此时空闲集合不为空,说明这个机器开着但是现在没有任务可做 // 那么肯定是优先选择做完上个任务的时间晚的来做这个任务 // 这样机器等的时间就少 if (!notworking.empty()){ ll tmp=notworking.top(); notworking.pop(); sum+=work[i].end-tmp; // 加上机器等的时间和做这个任务的时间 working.push(work[i].end); // 加入运行序列 } // 若果此时空闲集合为空,说明现在没有机器,那只能新开一台机器 else{ cnt++; // 新开一台机器 sum+=work[i].end-work[i].start; // 加上做这个任务的时间 working.push(work[i].end); // 加入运行序列 } } printf("%lld %lld\n",cnt,sum); }}
阅读全文
0 0
- HDU 6180 Schedule【优先队列+模拟】
- HDU 5437--优先队列模拟
- HDU-5437-模拟-优先队列
- HDU 6136 模拟 + 优先队列
- HDU 6136 优先队列 模拟
- hdu 6136 模拟+优先队列
- hdu 6168 模拟+优先队列
- hdu 5437 优先队列 模拟
- Hdu 1434 幸福列车【优先队列模拟】
- 模拟 优先队列(hdu 5437)
- hdu Problem-1896(优先队列+模拟)
- hdu 2364 Escape【模拟优先队列】【bfs】
- hdu1434(优先队列&&模拟)
- uva540 优先队列+模拟
- HDU 1873-看病要排队(优先队列+模拟乱搞)
- hdu 1873 看病要排队(优先队列模拟)
- HDU 5437 Alisha’s Party(优先队列+模拟)
- hdu 5040 Instrusive(bfs+优先队列)(模拟)
- 来自西弗吉利亚大学li xin整理的CV代码合集
- JS中的prototype
- string.xml 转 csv
- 卷积神经网络CNN-基础
- 关于IR2104的使用与经验
- HDU 6180 Schedule【优先队列+模拟】
- weblogic Tomcat Jboss简单说明(拷贝)
- 广度优先算法展示相关/如何在代码中计算当前顶点相对于源点的层数
- Linux环境变量文件及配置
- github删除仓库及文件夹
- HTTP 传输内容的压缩
- iOS 一一 项目中的常见文件
- 小白算法练习 简单背包专题002 01背包k优解 hdu dp
- 如何解决POST、GET请求时中文乱码