通过一道贪心学到了优先队列的用法
来源:互联网 发布:淘宝女装前十名网红 编辑:程序博客网 时间:2024/05/18 19:38
题目是POJ3190
#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>using namespace std;struct dd{ int l; int r; int ps; friend bool operator<(struct dd k1,struct dd k2) { return k1.r>k2.r; }}a[50005];typedef struct dd dd;bool cmp(dd a,dd b){ if(a.l==b.l)return a.r>b.r;else return a.l<b.l;}int a1[50005];int main(){ int i,j,m,n; while(scanf("%d",&m)!=EOF) { int need=1; for(i=0;i<m;i++) { scanf("%d%d",&a[i].l,&a[i].r); a[i].ps=i; } sort(a,a+m,cmp); priority_queue<dd> q; q.push(a[0]); a1[a[0].ps]=1; for(i=1;i<m;i++) { if(a[i].l<=q.top().r) a1[a[i].ps]=++need; else { a1[a[i].ps]=a1[q.top().ps]; q.pop(); } q.push(a[i]); } printf("%d\n",need); for(int i=0;i<m;i++) printf("%d\n",a1[i]); } return 0; }
题目的意思是一些奶牛,他们在固定的时间挤奶,问最少需要几台机器能完成全部的工作。
首先 先对左边的起始时间进行排序号,然后再从右边的时间开始,一一入队,队列使用优先队列,根据右边时间结束短的放队列的头,如果下一个时间比头时间短就入队,然后机器数目+1,如果右端的时间大于等于头时间,有抛弃队首,然后将这个时间入队列。
priority_queue<int, vector<int>, greater<int> > qi2;//从小到大的优先级队列,可将greater改为less,即为从大到小
0 0
- 通过一道贪心学到了优先队列的用法
- poj 2431 Expedition 贪心+优先队列 很好很好的一道题!!!
- 优先队列的用法
- 优先队列的用法
- 优先队列的用法
- 优先队列的用法
- 优先队列的用法
- 优先队列的用法
- 优先队列的用法
- 优先队列的用法
- PKU2421 -一道不错的题(用到了并查集,优先队列)
- 一道题目的二种思路,你学到了什么?
- 优先队列 priority_queue 的用法
- priority_queue优先队列的用法
- 优先队列的简单用法
- STL 优先队列、队列、栈的用法
- poj3614-贪心、优先队列
- EOJ1855 贪心+优先队列
- 写socket网络通讯Agenda时遇到的几个坑
- 规划局规划局很关键非官方规划方大哥大法官豆腐干豆腐
- VisionEngine游戏对象中装饰组介绍
- java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for
- 个几个环节个环境规划就规划局规划局个环境规划
- 通过一道贪心学到了优先队列的用法
- 刘汝佳紫书-EdmondsKarp算法解决最大流问题
- 房管局和各家各户几个和就规划局规划局各环节各环节
- 三国演义告诉我们的59条真理
- poj-2594
- 房管局和各家各户几个和菊花哥的风格的风格电饭锅电饭锅电饭锅
- UICollectionView 集合视图详解
- MySQL存储过程详解
- 算法导论学习笔记-1-4章