有 n头牛(1<=n<=50,000)要挤奶。给定每头牛挤奶的时间区
间[A,B] (1<=A<=B<=1,000,000,A,B为整数)。

牛需要呆畜栏里才能挤奶。一个畜栏同一时间只能容纳一头牛。 问至少需要多少个畜栏,才能完成全部挤奶工作,以及每头牛都 放哪个畜栏里(Special judged)

去同一个畜栏的两头牛,它们挤奶时间区间哪怕只在端点重合也是不可以的。

解题思路:

  1. 把所有奶牛按开始时间从小到大排序。
  2. 为第一头奶牛分配一个畜栏。
  3. 依次处理后面每头奶牛i。处理 i 时,考虑已分配畜栏中,结束时间最 早的畜栏x。
    若 E(x) < S(i), 则不用分配新畜栏,i可进入x,并修改E(x)为E(i)
    若 E(x) >= S(i),则分配新畜栏y,记 E(y) = E(i)
    直到所有奶牛处理结束 需要用优先队列存放已经分配的畜栏,并使得结束时间最早的畜栏始终位于队列头部。

代码如下:

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
struct cow
{int a,b;//挤奶的起终点 int no;//编号 bool operator < (const cow &s) const{return a<s.a;//开始时间早的排在前面 }
}cows[50100];
int pos[50100];//pos[i]表示编号为i的奶牛去的畜栏编号
struct Stall
{int end;//结束时间 int no;//编号 bool operator < (const Stall &s) const{//结束时间早的排在优先队列前面 return end>s.end;}Stall(int e,int n):end(e),no(n) { }
};
int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d%d",&cows[i].a,&cows[i].b);cows[i].no=i;}sort(cows,cows+n);int total=0;priority_queue<Stall> pq;for(int i=0;i<n;i++){if(pq.empty()){total++;pq.push(Stall(cows[i].b,total));pos[cows[i].no]=total;}else{Stall st=pq.top();if(st.end<cows[i].a){pq.pop();pos[cows[i].no]=st.no;pq.push(Stall(cows[i].b,st.no));}else {total++;pq.push(Stall(cows[i].b,total));pos[cows[i].no]=total;}}}printf("%d\n",total);for(int i=0;i<n;i++) printf("%d\n",pos[i]);return 0;
}

POJ 3190 Stall Reservations(贪心算法)相关推荐

  1. POJ - 3190 Stall Reservations(贪心+优先队列优化)

    题目链接:点击查看 题目大意:有n头牛在畜栏中吃草,每个畜栏在同一时间段只能提供给一头牛吃草,所以可能会需要多个畜栏,给定N头牛和每头牛开始吃草和结束吃草的时间,每头牛在给定时间段内会一直吃草,求需要 ...

  2. POJ 3190: Stall Reservations

    思路: 1.读入数据,将奶牛的相关数据存在数组中,按开始时间从前到后排列 2.定义最小堆(位于根上的奶牛的结束时间最早)(用于找到已经使用结束的牛棚.若用数组存储每个牛棚的使用结束时间,再找结束时间最 ...

  3. POJ 2709 Painter 【贪心算法】

    [原题链接] http://acm.pku.edu.cn/JudgeOnline/problem?id=2709 [题目大意] 要配置出n(3<=n<=12)种颜色的颜料,并配置出一定量的 ...

  4. POJ 3040 Allowance——经典贪心算法题目

    题目链接 题目大意: 约翰要给他的牛贝西发工资,每天不得低于C元,约翰有n种面值的钱币,第i种的面值为v_i,数量有b_i.问这些钱最多给贝西发多少天的工资.注意,每种面值的金钱都是下一种的面值的倍数 ...

  5. 【贪心】Stall Reservations(luogu 2859/poj 3190)

    Stall Reservations luogu 2859 poj 3190 题目大意: 有n头牛,每头牛都有自己的挤奶时间,挤奶时间内每头牛用一个奶棚,现在问最少需要多少个奶棚 输入样例 5 1 1 ...

  6. 贪心算法—区间调度 电影节(POJ 4151)

    贪心算法--区间选取问题 或是区间调度问题 本文解决一个很经典的贪心算法问题 Interval Scheduling(区间调度问题).给你很多形如[start,end]的闭区间,请你设计一个算法,算出 ...

  7. 贪心算法—建立雷达(POJ 1328)

    贪心算法--区间选点问题 这也是贪心算法的经典问题,一般情况为:有n个闭区间[ai,bj],取尽量少的点,使得每个区间内都至少有一个点. 分析 如果区间i内已经有一个点被取到,则称此区间已经被满足. ...

  8. 信息学奥赛第十节 —— 贪心算法(渡河问题POJ 1700 Crossing River + 拦截导弹的系统数量求解)

    复习概念 贪心算法又叫贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,贪心算法不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解. 无后效性:贪心算法不是对所有问题都 ...

  9. 贪心算法—圣诞老人的礼物(POJ 4110)

    贪心算法--物品可拆分情况求背包最大价值问题 描述 圣诞节来临了,在城市A中圣诞老人准备分发糖果,现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走.圣诞老人的驯鹿 ...

最新文章

  1. ActionForm类及表单数据验证
  2. beautifulsoup find函数返回值_再端一碗BeautifulSoup
  3. RAC的搭建(一)--安装环境准备
  4. Spring框架初写
  5. linux查看ko信息,linux 查看信息命令
  6. 如果你也会C#,那不妨了解下F#(5):模块、与C#互相调用
  7. ElasicSearch(3) 安装elasticsearch-head
  8. 【OpenGL4.0】GLSL-Flat Shading平面着色
  9. QT5新建工程错误-无法打开源文件QtWidgets/QApplication
  10. 寻找不到iframe元素
  11. L325 如何睡觉
  12. C++走向远洋——35(友元,时间)
  13. Linux安装VIM执行sudo apt-get install vim 现在没有可用的软件包但是它被其他软件包用了
  14. unreal 安卓打包出现 LogHttp: Warning: 000001D09B0C8F00: request failed, libcurl error 哇塞 真的是爆炸 不知道为啥巨慢
  15. 济南技工学校计算机,济南华力科技技工学校
  16. install falled update incompatible
  17. MATLAB学习笔记2:MATLAB基础知识(下)
  18. Altium Designer 学习笔记(PCB封装库)
  19. Unity3D for VR 学习(1): 又一个新玩具 暴风魔镜 4(Android)
  20. 【STM32CubeIDE和ITM SWV实现printf调试信息的打印】

热门文章

  1. MySQL数据库基础 作者: SoumnsJ
  2. 知识付费海哥|我的理想是不上班
  3. 虚拟云服务器+试用,虚拟云服务器+试用
  4. 隐藏隧道通信:HTTP/HTTPS 代理转发
  5. zabbix3.4 移机并升级版本4.2
  6. Windows提示缺少msxml3.dll文件如何解决?
  7. 阅读bottle.py源码收获
  8. 小朵机器人安卓叫什么_小朵智能机器人app最新官网版
  9. ai切换rgb模式_当AI频繁切换色彩预览模式时 颜色会越变越深 求解?
  10. ZYNQ的PL控制PS的DDR