题目大意:

  (不说牛了)

  给出n个区间,选出个数最少的区间来覆盖区间[1,t]。n,t都是给出的。

  题目中默认情况是[1,x],[x+1,t]也是可以的。也就是两个相邻的区间之间可以是小区间的右端与大区间的左端相差1。这个是看题解才知道的。

解题思路:

  贪心题的关键是找到贪心策略。但是这题的贪心策略没那么明显。并且贪心策略没有特定地去选择某一区间。这一题最重要的是要知道在什么情况下才需要增加一个区间。

  首先是进行排序,按照区间的左端从小到大排序,左端相同的按照右端从小到大排。

  从头开始遍历(只能是一重循环,不然要超时了)。当遍历到于第i个区间[xi,yi]时,做下面的事情:

  1、设e为当前所有已经选择的区间的最右端。如果xi<=e+1,那么就代表这个区间很可能被选择。当然这样的区间可能有很多,所以我们需要去找最优的区间。

  2、在满足1的条件下,也就是xi<=e+1。设b为遍历过的所有区间的右端的最大值。如果i区间的右端点yi>b,就把b更新为yi。用一个flag来标记b是否更新过。所以这时候可以用flag=1来标记b更新过了。b有没有更新过有什么区别呢?b没有更新,代表这i区间一定不会被选择。

  3、在flag的值没有改变的前提下,查看一下第i+1和区间的左端点xi+1是否大于e+1。是大于的话,代表着被选择的区间数需要增加一个。因为不选择i区间就会产生断层。然后再把e更新为b,flag标记为0。这样做的话,需要自己增加一个区间,使得左端点大于题目中设定的T。

  “被选择的区间需要增加一个”,不代表i区间一定被选择,也可能是它前面的区间被选择。

例如:

这一组数据

8 14
1 2
1 3
2 3
2 10
3 9
5 7
8 11
11 14

遍历到3 9这一区间,e=3,b=10,cnt=1。cnt是选择的区间数。发现下一组数据的左端点5,已经大于e+1。所以x需要+1。但是我们会发现被选择的区间不是[3,9],应该是[2,10]。

代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int N=;
pair<int,int> s[N];
int main()
{
//freopen("test.txt","r",stdin);
int n,i,t;
while(scanf("%d%d",&n,&t)!=EOF){
for(i=;i<n;i++)
scanf("%d%d",&s[i].first,&s[i].second);
sort(s,s+n);
int e=,b=,x=;
bool flag=;
s[n].first=0x3f3f3f3f;
for(i=;i<n;i++)
{
if(s[i].first<=e+)
{
if(b<s[i].second) b=s[i].second,flag=;
if(s[i+].first>e+&&flag)
{
e=b;
x++;
flag=;
}
}
//printf("%d %d %d %d %d %d\n",s[i].first,s[i].second,e,b,flag,x);
}
if(e<t) printf("-1\n");
else printf("%d\n",x);
}
return ;
}

poj2376 Cleaning Shifts 区间贪心的更多相关文章

  1. POJ2376 Cleaning Shifts 【贪心】

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11542   Accepted: 3004 ...

  2. POJ2376 Cleaning Shifts

    题意 POJ2376 Cleaning Shifts 0x50「动态规划」例题 http://bailian.openjudge.cn/practice/2376 总时间限制: 1000ms 内存限制 ...

  3. 【POJ - 2376】Cleaning Shifts(贪心)

    Cleaning Shifts Descriptions: 原文是English,我这就直接上Chinese了,想看原文的点一下链接哦 大表哥分配 N (1 <= N <= 25,000) ...

  4. poj 3171 Cleaning Shifts(区间的最小覆盖价值)

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2743   Accepted: 955 De ...

  5. poj2376 Cleaning Shifts【线段树】【DP】

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32561   Accepted: 7972 ...

  6. poj2376 Cleaning Shifts(区间贪心,理解题意)

    https://vjudge.net/problem/POJ-2376 题意理解错了!!真是要仔细看题啊!! 看了poj的discuss才发现,如果前一头牛截止到3,那么下一头牛可以从4开始!!! # ...

  7. poj-2376 Cleaning Shifts (排序+贪心)

    http://poj.org/problem?id=2376 john有n头牛做打扫工作,他想在t时间内每个时间都至少有一头牛在做打扫工作,第一头牛在1,最后一头牛在t时间,每一头牛工作都有一个开始时 ...

  8. poj 2376 Cleaning Shifts(贪心)

    Description Farmer John <= N <= ,) cows to <= T <= ,,), the first being shift and the la ...

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

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

随机推荐

  1. 举枪消灭"烂代码"的实战案例

    前言 之前我写过一篇如何少写PHP "烂"代码 https://segmentfault.com/a/11...感觉很多新人对此不太理解.今天以打卡功能为例,去讲解其中的奥秘.那篇 ...

  2. ASP.NET大闲话:ashx文件有啥用

    在VS中右击项目,添加新项,我们找到.ashx文件在新建项模板中叫做“一般处理程序”,那么这个一般处理程序用来干吗的呢? 我们可以这样地简单理解,嗯,不需搞得太复杂,它就类似.aspx文件,用于处理传 ...

  3. sdp概览

    sdp会话描述符有多行用如下格式组成的文本: <type>=<value>等号旁边不允许留白. sdp会话描述符有一个session-level的段,后面会接零个或者多个med ...

  4. tensorflow的数据输入

    tensorflow有两种数据输入方法,比较简单的一种是使用feed_dict,这种方法在画graph的时候使用placeholder来站位,在真正run的时候通过feed字典把真实的输入传进去.比较 ...

  5. TypeError: CleanWebpackPlugin is not a constructor

    在项目中引入clean-webpack-plugin打包后报错 new CleanWebpackPlugin(), ^ TypeError: CleanWebpackPlugin is not a c ...

  6. 赛门铁克扩展验证EV SSL证书

      申请EV SSL证书,将接受最严格验证企业域名所有权和企业身份信息,属于最高信任级别扩展验证(EV)的 EV SSL证书,最高达256位自适应加密.Symantec不仅提供先进的SSL加密技术,同 ...

  7. Servlet中使用getInputStream进行文件上传

    据说古老了点,所以代码比较繁琐,主要用于处理文件的地方太多. 下节用SERVLET3.0的Part进行操作一下. form.html: <!DOCTYPE html> <html&g ...

  8. [poj3321]Apple Tree_dfs序_树状数组

    Apple Tree poj-3321 题目大意:给你一个根固定的树,每一个点的点权是0或1,查询子树点权和. 注释:$1\le n \le 10^5$. 想法:刚刚学习dfs序,刷到水题偶哈哈. 什 ...

  9. 我要抓狂了。。又回到了几天不能A一道题的时候

    poj1556我不做了.你做做把...我已经要game over了

  10. Android自己定义Toast

    一.引言 在开发的过程中你会发现Android自身的Toast提示有很多限制,比方我想自己定义Toast的动画.自己定义一个美观的View显示在Toast中.很多其它的是让Toast显示指定的时长等等 ...