题目链接:http://poj.org/problem?id=2376

题目大意:选择一些区间使得能够覆盖1-T中的每一个点,并且区间数最少

题目分析:这道题目很明显可以用贪心法来解决。但题目没有看起来那么简单,有许多的坑。

我的贪心策略如下:

1.将区间按照起点排序,并且保证起点相同的,终点大的排在前边

2.在前一个选取的区间范围[L0,R0+1]中,选取起点在此范围但终点最靠右的一个区间

3.重复这个过程

另外,还有几点需要注意的地方:

1.要保证第一个区间起点和最后一个区间终点符合1-L的条件

2.前一个区间的终点可以不与后一个区间的起点重合

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
struct Line{
int x,y;
}A[ + ];
bool cmp(const Line& l1, const Line& l2){
if(l1.x == l2.x) return l1.y > l2.y;
return l1.x < l2.x;
}
int main(){
ios::sync_with_stdio(false);
int N, T;
while(cin >> N >> T){
for(int i = ; i < N; i++)
cin >> A[i].x >> A[i].y;
sort(A, A + N, cmp);
int i = , cnt = , ok = ;
if(A[i].x > )ok = ;
else while(i < N - && A[i].y < T){
int t = i;
for(int j = i + ; j < N &&A[j].x <= A[i].y+; j++)
if(A[j].y > A[t].y) t = j;
if(t == i){
ok = ;
break;
}
else i = t, cnt++;
}
if(A[i].y < T) ok = ;
if(ok)cout << cnt << endl;
else cout << - << endl;
}
return ;
}

POJ 2376 (区间问题,贪心)的更多相关文章

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

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

  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 贪心

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

  5. POJ 2376 Cleaning Shifts【贪心】

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

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

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

  7. POJ 3190 Stall Reservations贪心

    POJ 3190 Stall Reservations贪心 Description Oh those picky N (1 <= N <= 50,000) cows! They are s ...

  8. POJ 2392 Space Elevator(贪心+多重背包)

    POJ 2392 Space Elevator(贪心+多重背包) http://poj.org/problem?id=2392 题意: 题意:给定n种积木.每种积木都有一个高度h[i],一个数量num ...

  9. 贪心问题:区间覆盖 POJ 2376 Cleaning Shift

    题目:http://poj.org/problem?id=2376 题意:就是 N 个区间, 输入 N 个区间的 [begin, end],求能用它们覆盖区间[1,T]的最小组合. 题解: 1. 首先 ...

随机推荐

  1. python使用ctypes模块下的windll.LoadLibrary报OSError: [WinError 193] % 不是有效的 Win32 应用程序

    原因:python是64位的python,而windll.LoadLibrary只能由32位的python使用 参考: 64位Python调用32位DLL方法(一) 解决方法:使用32位的python ...

  2. Vue.js——十分钟入门Vuex

    一. 什么是Vuex?   Vuex Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化. Vue ...

  3. 使用css完成物流进度的样式

    使用css完成物流进度的样式 效果: css样式: <style type="text/css"> ul li { list-style: none; } .packa ...

  4. laychat聊天功能

    windows版本:1.直接下载laychat聊天室压缩包,并解压到PHPstudy本地PHP环境中去:2.进入E:\PHPTutorial\WWW\laychat-master\vendor\Wor ...

  5. 关于if与switch的使用与区别

    这是if语句: if (条件表达式1){ //条件判断 //n多语句1 }else if(条件表达式2){ //n多语句2 }else if(条件表达式3){ //n多语句3 } ... ... el ...

  6. mysql底层实现

    MySQL 的常用引擎 1. InnoDB InnoDB 的存储文件有两个,后缀名分别是 .frm 和 .idb,其中 .frm 是表的定义文件,而 idb 是数据文件. InnoDB 中存在表锁和行 ...

  7. LIS(单调队列优化 C++ 版)(施工ing)

    #include <iostream> using namespace std; #include <cstdio> ; ,x,stack[MaxN]; int main(){ ...

  8. Python之路(四)--->list、元组、字典

    好久没有更新了,感觉自己写的东西并没有太多人看,可能是因为写的不好,也可能是太基础了.学习是一个漫长的过程,结果结果固然重要,但是更重要的是在学习的过程中所学到方法,这些方法在以后的生活还是工作中都能 ...

  9. 20155209 2016-2017-2《Java程序设计》课程总结

    20155209 2016-2017-2<Java程序设计>课程总结 预备作业1 刚刚接触Markdown的写法,刚刚接触博客,简单了解娄老师的教学方式. 预备作业2 怎么将学习java像 ...

  10. 优步UBER司机全国各地奖励政策汇总 (4月11日-4月17日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...