题意:奶牛挤奶问题,每只奶牛在[a,b]的时间内挤奶,要求挤奶的过程中不能不打扰,且只能自己一个人独享挤奶的机器。问最少需要多少个挤奶的机器?

思路:

  1. 对奶牛挤奶开始的时间从小到大开始排序。
  2. 将正在工作的奶牛放在"队列"中,这里采用的是"优先队列"
  3. 如果后面的一个奶牛的开始时间大于在队列中工作的结束时间,则不需要加机器,只需要将正在工作的奶牛pop出去,然后放入新的奶牛  否则要加机器

代码中对思路3的实现

pq.push(cow[]);
for (int i = ; i < n; i++)
{
Cow t = pq.top();
if (cow[i].b > t.e)
{
pq.pop();
num[cow[i].id] = num[t.id];
}
else
{
num[cow[i].id] = ans++;
}
pq.push(cow[i]);
}

注意点:

  • 本题需要奶牛的序号即id 所以需要保存每只奶牛的id才方便后面的使用,不然排序一下,id全部改变了.
  • 排序的时候如果相同的开始时间,就按照结束时间由小到大排序
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdio>
using namespace std;
struct Cow {
int id, b, e;
bool friend operator<(Cow a, Cow b)
{
return a.e > b.e;
}
}cow[];
int cmp(Cow a, Cow b)
{
if (a.b == b.b)
{
a.e < b.e;
}
return a.b < b.b;
}
int main()
{
int n;
int ans = , num[];
scanf("%d", &n);
for (int i = ; i < n; i++)
{
cow[i].id = i;
scanf("%d%d", &cow[i].b, &cow[i].e);
}
sort(cow, cow + n, cmp);
priority_queue<Cow> pq;
num[cow[].id] = ans++;
pq.push(cow[]);
for (int i = ; i < n; i++)
{
Cow t = pq.top();
if (cow[i].b > t.e)
{
pq.pop();
num[cow[i].id] = num[t.id];
}
else
{
num[cow[i].id] = ans++;
}
pq.push(cow[i]);
}
printf("%d\n", ans);
for (int i = ; i < n; i++)
printf("%d\n", num[i] + );
return ;
}

            

poj 3190 奶牛挤奶问题 贪心算法的更多相关文章

  1. POJ 3190 Stall Reservations【贪心】

    POJ 3190 题意: 一些奶牛要在指定的时间内挤牛奶,而一个机器只能同时对一个奶牛工作.给你每头奶牛的指定时间的区间(闭区间),问你最小需要多少机器.思路:先按奶牛要求的时间起始点进行从小到大排序 ...

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

    http://poj.org/problem?id=3190 有n头挑剔的奶牛,只会在一个精确时间挤奶,而一头奶牛需要占用一个畜栏,并且不会和其他奶牛分享,每头奶牛都会有一个开始时间和结束时间,问至少 ...

  3. POJ 3616 奶牛挤奶

    Milking Time 贝茜是一个勤劳的牛.事实上,她如此​​专注于最大化她的生产力,于是她决定安排下一个N(1≤N≤1,000,000)小时(方便地标记为0..N-1),以便她生产尽可能多的牛奶. ...

  4. poj 1328 安雷达问题 贪心算法

    题意:雷达如何放置?在xoy二维平面坐标系里面,x轴上方的为岛屿,x轴下方的是雷达要放到位置,如何放使得雷达放的最少? 思路 肯定放在x轴上减少浪费是最好的选择 什么情况下,雷达无法到达呢?--以这个 ...

  5. poj 2586 Y2K Accounting Bug(贪心算法,水题一枚)

    #include <iostream> using namespace std; /*248K 32MS*/ int main() { int s,d; while(cin>> ...

  6. poj 2393 奶牛场生产成本问题 贪心算法

    题意:有一个奶牛场,第i周的生产成本为c,需要数量为 y,每周的存储成本为s.问怎么安排使得成本最低? 思路: 成本最低是吧?求出每周的最低成本*该周需要的数量就是成本最低 每周的成本有两个:自己本周 ...

  7. poj 1017 装箱子问题 贪心算法

    题意:有1*1到6*6的的东西,需要用6*6的箱子将它们装起来.问:至少需要多少个6*6箱子 思路: 一个瓶子怎么装东西最多?先装石头,在装沙子,然后装水. 同样放在本题就是先装6*6然后5*5... ...

  8. POJ 3617 Best Cow Line 贪心算法

    Best Cow Line Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26670   Accepted: 7226 De ...

  9. POJ 3190 Stall Reservations 【贪心 优先队列】

    题意:给出n头牛必须单独占用一台机器的时间段,问至少需要多少台机器 先按照每头牛的时间的x来排序,然后用一个优先队列(优先选取最小的)维护已经喂好的牛的最小的结束时间 比如现在优先队列里面有m头牛已经 ...

随机推荐

  1. git忽略已经被提交的文件

    git忽略已经被提交的文件 git rm --cached logs/xx.log 然后更新 .gitignore 忽略掉目标文件, 最后 git commit -m "We really ...

  2. Java选择排序算法

    package com.jckb; /**选择排序 * * @author gx *算法原理: *第一个数和后面每个数进行比较,如果大于后面的数就进行位置交换, *第一次比较结束后得到了最小值 */ ...

  3. CallContext的LogicalCallContext在多线程环境下面公用变量

    压根名听说过这个类的看这里:如何实现对上下文(Context)数据的统一管理 原来以为CallContext就可以直接在多线程环境下面共享使用的,今天突然想到:Asp.Net环境下面,设置来设置去的, ...

  4. <Android HAL 之路> HAL 简介

    HAL层概述 名称: HAL, Hardware Abstracting Layer,中文名字:硬件抽象层. 作用:对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节.向上衔接Andro ...

  5. MFC制作简单通讯录程序

    学习c++和MFC一段时间了,苦于没有项目实战,所以自己写了一个简单的简单通讯录程序,以前用c#写简单很多,例程是这本书上的实例,我的第一个winform程序也是从这本书上学的,总结c#写的话更简单, ...

  6. Linux下安装并配置SSH服务

    一.使用命令检测Linux系统上是否已经安装了SSH服务:(命令:rpm -qa |grep ssh) 二.如果没有安装SSH软件包,可以通过yum 或rpm安装包进行安装(命令:yum instal ...

  7. [dp]uestc oj E - 菲波拉契数制

    E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  8. Failed to load property source from location 'classpath:/applica)

    : 1.注释错误(application.yml用的是#注释) 2.缩进采用tab而不是空格引起的(不同配置之间也不能有tab出现,否则会报错) 3.冒号后面必须有空格否则会报错

  9. Django form组件应用

    form 组件的使用 class Register(forms.Form): user = forms.CharField(min_length=2, widget=widgets.TextInput ...

  10. opencv中mat的type

    type表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位数)+(数据类型)+(通道数),由type()返回,但是返回值是int型,不是OpenCV预定义的宏( ...