Cleaning Shifts

Descriptions:

原文是English,我这就直接上Chinese了,想看原文的点一下链接哦

大表哥分配 N (1 <= N <= 25,000) 只中的一些奶牛在牛棚附近做些清洁。 他总是要让至少一只牛做清洁。他把一天分成T段(1 <= T <= 1,000,000), 第一段是1,最后一段是T

每只奶牛只在一些时间段有空。奶牛如果选择某一段时间,则必须完成整段时间的工作

你的任务是帮助FJ安排一些奶牛,使每段时间至少有一只奶牛被安排来做这件事。并且奶牛数应尽可能小。如果不可能办到,输出-1

Input

注意,输入包含多组测试数据,请处理到文件结束
* 第一行:N和T 
* 第二行至N+1行: 每一行包括奶牛能工作的开始和结束时间。闭区间。

Output

*每组数据一行,输出完成清洁所需最少的奶牛数,如果不可能办到,输出-1

Sample Input

3 10
1 7
3 6
6 10

Sample Output

2

题目链接:

https://vjudge.net/problem/POJ-2376

给定N个小区间以及区间起点终点,求能用它们覆盖区间[1,T]的最小组合。

贪心策略是从左往右,尽量选择长度最大的区间。

首先对所有奶牛排序,按照开始时间排序。

然后更新起点=终点+1,搜索剩下的奶牛中能够覆盖这个起点同时终点最远的那一头,更新终点。

AC代码;

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define ME0(x) memset(x,0,sizeof(x))
using namespace std;
int N,T;
struct cow
{
int s;//开始时间start的缩写
int e;//结束时间end的缩写
int no;
bool operator<(const cow &c)const//按开始时间从大到小排序
{
return s<c.s;
}
}; int main()
{
while(cin>>N>>T)
{
cow cows[];//在这里设置数组就不用每次都重置数组了
for(int i=; i<N; ++i)
cin>>cows[i].s>>cows[i].e;
sort(cows,cows+N);//排序
// for(int i=0; i<N; i++)
// cout<<cows[i].s<<" "<<cows[i].e<<endl;
int over=;//结束时间
int pos=;//位置
int sum=;//一共几头牛
while(over<T)
{
int start=over+;//每次的开始时间都是上一次的结束时间+1
// cout<<"***"<<start<<endl;
for(int i=pos; i<N; ++i)
{
if(cows[i].s<=start)//能够覆盖起始点
{
if(cows[i].e>over)
over=max(over,cows[i].e);//将结束时间延长到最远
}
else
{
//不能覆盖起点,说明上一头牛的终点就是最远点,需要换一头牛了
// cout<<cows[i].s<<" "<<cows[i].e<<endl;
pos=i;
break;
}
}
// 没找到这样的牛,失败
if(start>over)
{
cout<<-<<endl;
break;
}
//找到了,+1
else
++sum;
}
if(over>=T)//正常跳出循环,输出sum即可
cout<<sum<<endl;
}
}

【POJ - 2376】Cleaning Shifts(贪心)的更多相关文章

  1. POJ 2376 Cleaning Shifts 贪心

    Cleaning Shifts 题目连接: http://poj.org/problem?id=2376 Description Farmer John is assigning some of hi ...

  2. POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)

    Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some clea ...

  3. poj 2376 Cleaning Shifts 贪心 区间问题

    <pre name="code" class="html"> Cleaning Shifts Time Limit: 1000MS   Memory ...

  4. POJ 2376 Cleaning Shifts (贪心,区间覆盖)

    题意:给定1-m的区间,然后给定n个小区间,用最少的小区间去覆盖1-m的区间,覆盖不了,输出-1. 析:一看就知道是贪心算法的区间覆盖,主要贪心策略是把左端点排序,如果左端点大于1无解,然后, 忽略小 ...

  5. POJ 2376 Cleaning Shifts(轮班打扫)

    POJ 2376 Cleaning Shifts(轮班打扫) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] Farmer ...

  6. poj 2376 Cleaning Shifts

    http://poj.org/problem?id=2376 Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  7. POJ 2376 Cleaning Shifts【贪心】

    POJ 2376 题意: 给出一给大区间和n各小区间,问最少可以用多少小区间覆盖整个大区间. 分析: 贪心法.设t为当前所有已确定区间的最右端,那我们可以每次都取所有可选的小区间(左端点<=t+ ...

  8. 【原创】poj ----- 2376 Cleaning Shifts 解题报告

    题目地址: http://poj.org/problem?id=2376 题目内容: Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K ...

  9. poj 2376 Cleaning Shifts 最小区间覆盖

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40751   Accepted: 9871 ...

  10. ACM学习历程——POJ 2376 Cleaning Shifts(贪心)

    Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning ...

随机推荐

  1. HTML5开发移动web应用—JQuery Mobile(2)-导航栏和页脚

    导航栏部分的代码一般放置在data-role为header的div的内. <div data-role="header"> <a href="#&quo ...

  2. MongoDB:数据模型介绍

    在MongoDB的数据有灵活的模式.不像SQL数据库,(SQL数据库)要求你必须在插入数据之前决定和声明一个表的模式.MongoDB的集合不强制文档的结构.这个灵活性有利于文档到实体或对象的映射. 每 ...

  3. C#语言基础语句

    case,switch,break的使用 Console.WriteLine("1.汉堡"); Console.WriteLine("2.薯条"); Conso ...

  4. ruby简单的基础 2

    1.代码块 代码块是用大括号或者do...end括起来的一系列代码.{ #this is a block} do #this is a blockend [1,2,3,4,5].each {|i| p ...

  5. 【BZOJ】1007 水平可见直线

    [分析] 维护一个下凸包. 首先依照斜率来从小到大排序. 考虑斜率同样的,肯定仅仅能选截距大的,把截距小的给筛掉. 然后用栈来维护下凸包.先压入前两条直线. 然后对于每一条直线i,设栈中上一条直线p= ...

  6. CarbonData

    CarbonData http://carbondata.apache.org/ Apache顶级项目CarbonData应用实践与2.0新技术规划介绍_搜狐科技_搜狐网 https://www.so ...

  7. vue、react、angular三大框架对比

    前端的三大框架当属vue.react以及angular了,个人比较偏向react,它的社区比较繁荣,有很多丰富的组件 .angular的话感觉编译时间有点长,等待很恼火. vue与react vue和 ...

  8. (24) java web的struts2框架的使用-action参数自动封装与类型转换

    structs可以对参数进行自动封装,做法也很简单. 一,action参数自动封装: 1,可以直接在action类中,声明public的属性,接受参数. 2,属性也是是private,如果是priva ...

  9. spring boot---WebFilter注解 实现自定义登录过滤器

    https://my.oschina.net/wangnian/blog/647976 http://www.jianshu.com/p/05c8be17c80a

  10. 织梦DEDE多选项筛选_联动筛选功能的实现_二次开发

    织梦默认的列表页没有筛选功能,但有时候我们做产品列表页的时候,产品的字段比较多,很多人都需要用到筛选功能,这样可以让用户更方便的找到自己所需要的东西,实现这个联动筛选功能需要对织梦进行二次开发,下面就 ...