POJ 2376 (区间问题,贪心)
题目链接: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 (区间问题,贪心)的更多相关文章
- POJ 2376 Cleaning Shifts (贪心,区间覆盖)
题意:给定1-m的区间,然后给定n个小区间,用最少的小区间去覆盖1-m的区间,覆盖不了,输出-1. 析:一看就知道是贪心算法的区间覆盖,主要贪心策略是把左端点排序,如果左端点大于1无解,然后, 忽略小 ...
- POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)
Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some clea ...
- poj 2376 Cleaning Shifts 贪心 区间问题
<pre name="code" class="html"> Cleaning Shifts Time Limit: 1000MS Memory ...
- POJ 2376 Cleaning Shifts 贪心
Cleaning Shifts 题目连接: http://poj.org/problem?id=2376 Description Farmer John is assigning some of hi ...
- POJ 2376 Cleaning Shifts【贪心】
POJ 2376 题意: 给出一给大区间和n各小区间,问最少可以用多少小区间覆盖整个大区间. 分析: 贪心法.设t为当前所有已确定区间的最右端,那我们可以每次都取所有可选的小区间(左端点<=t+ ...
- POJ 2376 Cleaning Shifts(轮班打扫)
POJ 2376 Cleaning Shifts(轮班打扫) Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] Farmer ...
- POJ 3190 Stall Reservations贪心
POJ 3190 Stall Reservations贪心 Description Oh those picky N (1 <= N <= 50,000) cows! They are s ...
- POJ 2392 Space Elevator(贪心+多重背包)
POJ 2392 Space Elevator(贪心+多重背包) http://poj.org/problem?id=2392 题意: 题意:给定n种积木.每种积木都有一个高度h[i],一个数量num ...
- 贪心问题:区间覆盖 POJ 2376 Cleaning Shift
题目:http://poj.org/problem?id=2376 题意:就是 N 个区间, 输入 N 个区间的 [begin, end],求能用它们覆盖区间[1,T]的最小组合. 题解: 1. 首先 ...
随机推荐
- js获取dom元素的子元素,父元素,兄弟元素小记
原生jsvar a = document.getElementById("dom"); del_space(a); //清理空格 var b = a.childNodes; //获 ...
- 【六】tf和cgi进行联合试验,完成日志服务器
[任务6]tf和cgi进行联合试验,完成日志服务器 [任务6]tf和cgi进行联合试验,完成日志服务器 改装gen-cpp目录下client.cpp文件 启动Nginx服务和gen-cpp目录下编译后 ...
- ESP8266传送文件设置和操作
问题:ESP8266不能被识别为USB盘,也不能通过串口传送文件,只能通过wifi传送文件,需要事前在串口连接后的repl状态下,用命令行方式配置网络参数,之后才可以用wifi传送文件(webrepl ...
- Python学习笔记十:json序列化,软件结构目录规范,ATM作业讲解,import本质论
json序列化 将系统的某个状态保存为字符串(挂起),序列化. import json json.dumps():序列化 json.loads():反序列化 简单类型数据处理 import pickl ...
- Python3 break与continue
Infi-chu: http://www.cnblogs.com/Infi-chu/ break和continue都是中断循环的意思,但是他们的中断后的效果不同. 请看如下两个例子就懂了 ''' 这个 ...
- 机器人操作系统ROS-工作空间的建立
运行例子为重德智能的github中的robot_sim_demo 创建一个robot_ws工作空间 1. mkdir -p robot_ws/src #创建catkin 工作空间 2. cd ro ...
- 20155308 实验四 Android开发基础
20155308 实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android.组件.布局管理器的使用: 掌握Android中 ...
- dat类型文件入库后校验数据有问题
一.问题: dat或者txt文件入库后,字段进行正则校验报出不应该出现的错误 二.排查: (1)根据报出的错误,把错误日志中的字串单独提取出来,进行正则校验发现没有问题 (2)可以想到,要不是程序问题 ...
- T-SQL语句基础
连接服务器 - 去哪个仓库找目标数据库 - 找仓库中的目标区域查找目标表 - 找货柜找数据(以行为基础单位) - 在货柜上找到目标的物品 基础T-Sql语句1.SQL语句的注释 2.创建数据库crea ...
- 基于Spring的最简单的定时任务实现与配置(三)--番外篇 cron表达式的相关内容
本来这篇文章是会跟本系列的前两篇文章一起发布的.但是,昨天在找资料总结的时候遇到了一点意外,就延后了一些. 本篇的内容主要参考了 这篇博文:http://www.cnblogs.com/junrong ...