应该还是蛮简单的一题,但是因为模拟太差,一直没调出来.......

\(显而易见的应该按照左区间从小到大排序,相等按照右区间大到小排序\)。

\(那么第一个区间的l一定要是1,而且必拿(否则没有区间能包括1)\)

\(往后找一个R尽可能大的区间,前提是L被我们上一个选的区间的R+1包括\)

\(重复\)

细节还比较多,我还是太菜了啊

#include <bits/stdc++.h>
using namespace std;
struct p{
int l,r;
}b[25009],a[25009];int n,t,cnt;
bool com(p a,p b){
if(a.l==b.l) return a.r>b.r;
else return a.l<b.l;
}
void last(){
cout<<-1;
exit(0);
}
int main()
{
cin>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>b[i].l>>b[i].r;
if(b[i].l<1) b[i].l=1;
}
sort(b+1,b+1+n,com);b[0].l=-1;
for(int i=1;i<=n;i++)
if(b[i].l!=b[i-1].l) a[++cnt]=b[i];//选取L相同时区间中的最优区间。不放到a数组里面也没事
if(a[1].l!=1) last();
int ans=1,tim,zan,i=1,num,flag;
while(1)
{
zan=a[i].r,tim=a[i].r,i++,flag=0;
if(tim>=t) break;
if(i>=cnt+1) last();
while(i<=cnt&&a[i].l<=tim+1)
{
if(zan<a[i].r)
flag=1,zan=a[i].r,num=i;
i++;
}
if(flag==0) last();
i=num,ans++;
}
cout<<ans;
}

然后下面是借鉴别人改进过的写法

#include <iostream>
#include <algorithm>
#include <string>
#include <cstdio>
using namespace std;
struct p{
int l,r;
}b[25009],a[25009];int n,t,cnt;
bool com(p a,p b){
if(a.l==b.l) return a.r>b.r;
else return a.l<b.l;
}
int main()
{
cin>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>b[i].l>>b[i].r;
if(b[i].l<1) b[i].l=1;
}
sort(b+1,b+1+n,com);b[0].l=-1;
for(int i=1;i<=n;i++)
if(b[i].l!=b[i-1].l) a[++cnt]=b[i];
int maxn=0,minn=0,top=1,ans=0;
while(maxn<t)
{
minn=maxn+1;//上一次覆盖的区间+1
for(int i=top;i<=cnt;i++)
{
if(a[i].l>minn)
{
top=i;
break;
}
else
maxn=max(maxn,a[i].r);
}
if(maxn==minn-1) break;//匹配失败
ans++;
}
if(maxn>=t) cout<<ans;
else cout<<-1;
}

POJ2376Cleaning Shifts(区间覆盖贪心)的更多相关文章

  1. codeforces Gym 100187F F - Doomsday 区间覆盖贪心

    F. Doomsday Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/F ...

  2. UVa 10382 Watering Grass (区间覆盖贪心问题+数学)

    题意:有一块长为l,宽为w的草地,在其中心线有n个喷水装置,每个装置可喷出以p为中心以r为半径的圆, 选择尽量少的装置,把草地全部润湿. 析:我个去啊,做的真恶心,看起来很简单,实际上有n多个坑啊,首 ...

  3. POJ 2376 Cleaning Shifts 区间覆盖问题

    http://poj.org/problem?id=2376 题目大意: 给你一些区间的起点和终点,让你用最小的区间覆盖一个大的区间. 思路: 贪心,按区间的起点找满足条件的并且终点尽量大的. 一开始 ...

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

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

  5. 高效算法——E - 贪心-- 区间覆盖

    E - 贪心-- 区间覆盖 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/E 解题思路: 贪心思想, ...

  6. 贪心算法----区间覆盖问题(POJ2376)

    题目: 题目的大概意思是约翰这个农民有N条牛,这些牛可以在一天中的某个时间段可以进行工作,他想把这个时间段分成若干个片段让这些牛去进行打扫任务,你的任务是安排尽量少的牛然后可以完成分成这些片段的打扫任 ...

  7. UVA 10382 Watering Grass(区间覆盖,贪心)题解

    题意:有一块草坪,这块草坪长l 米,宽 w 米,草坪有一些喷头,每个喷头在横坐标为 p 处,每个喷头的纵坐标都是(w/2) ,并且喷头的洒水范围是一个以喷头为圆心,半径为 r 米的圆.每次最少需要打开 ...

  8. 贪心问题:区间覆盖 POJ 1328 Rader Installation

    题目:http://poj.org/problem?id=1328 题意:给定海岛个数,雷达半径,输入各个海岛坐标,求能覆盖所有海岛的最少雷达数 题解: 1. 贪心的区间覆盖问题,尽量让每个雷达覆盖更 ...

  9. 贪心问题:区间覆盖 NYOJ 喷水装置(二)

    喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水 ...

随机推荐

  1. Git应用详解第七讲:Git refspec与远程分支的重要操作

    前言 前情提要:Git应用详解第六讲:Git协作与Git pull常见问题 这一节来介绍本地仓库与远程仓库的分支映射关系:git refspec.彻底弄清楚本地仓库到底是如何与远程仓库进行联系的. 一 ...

  2. P1352 没有上司的舞会&&树形DP入门

    https://www.luogu.com.cn/problem/P1352 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的 ...

  3. 【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!

    写在前面 随着系统并发量越来越高,Tomcat所占用的内存就会越来越大,如果对Tomcat的内存管理不当,则可能会引发Tomcat内存溢出的问题,那么,如何防止Tomcat内存溢出呢?我们今天就来一起 ...

  4. 学习Salesforce | Platform Developer Ⅰ 平台初级开发认证考试指南及备考资源

    一.平台开发人员考试计划 Salesforce平台开发人员初级认证面向具有在Lightning平台上构建自定义应用程序的知识.技能和经验的个人. 该认证考核Lightning平台的基本编程能力,并会使 ...

  5. Python中赋值、浅拷贝和深拷贝的区别

    前言文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http: ...

  6. 8行代码帮你python建立UDP通信

    首先我们要搭建一个UDP通信,首先我们就要知道什么UDP: UDP用户数据报传输协议,它位于TCP/IP协议的传输层,是一种无连接的协议,它发送的报文不能确定是否完整地到达了另外一端.UDP广泛应用于 ...

  7. python的多线程、多进程、协程用代码详解

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:刘早起早起 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  8. linux通过进程名查看其占用端口

    1.先查看进程pid ps -ef | grep 进程名 2.通过pid查看占用端口 netstat -nap | grep 进程pid 参考: https://blog.csdn.net/sinat ...

  9. 联通友华通信光纤猫PT952G设置无线路由光猫桥接拨号

    #0x1 登陆后台,点击网络,点击宽带设置.选择第二个接口. 0x2 只修改模式,改成Bridge,其他无需修改.然后直接接路由器拨号就行,或者电脑都行. 0x4  恢复默认拨号,这样修改以后,直接连 ...

  10. 爬虫实战2_有道翻译sign破解

    目标url 有道翻译 打开网站输入要翻译的内容,一一查找network发现数据返回json格式,红框就是我们的翻译结果 查看headers,发现返回结果的请求是post请求,且携带一大堆form_da ...