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

题意:就是 N 个区间, 输入 N 个区间的 [begin, end],求能用它们覆盖区间[1,T]的最小组合。

题解:

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

2. 更新 起点 为 上一次的终点 + 1,并寻找覆盖起点,且终点最远的区间

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std; const int maxn = + ;
typedef long long LL; int N;
LL T; struct Works {
int start,
end;
Works(int s = , int e = ) : start(s), end(e) {}
} works[maxn]; bool cmp(const Works& a, const Works& b)
{
return a.start < b.start || (a.start == b.start && a.end > b.end);
} void solve()
{
cin >> N >> T; for (int i = ; i < N; i++)
{
scanf("%d%d", &works[i].start, &works[i].end);
} sort(works, works + N, cmp); int ans = ;
int current_sum = ;
bool flag = true;
while (current_sum < T)
{
int begin = current_sum + ; for (int i = ; i < N; i++)
{
//寻找能够能覆盖起点的牛
if (works[i].start <= begin) {
//是否能覆盖起点
if (works[i].end >= begin) {
//寻找 最远的 终点
current_sum = max(current_sum, works[i].end);
}
}
}
//没有找到这样的牛
if (begin > current_sum) {
flag = false;
break;
}
else {
ans++;
}
}
if (flag) {
printf("%d\n", ans);
} else {
printf("-1\n");
}
} int main()
{
solve();
return ;
}

贪心问题:区间覆盖 POJ 2376 Cleaning Shift的更多相关文章

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

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

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

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

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

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

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

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

  5. poj 2376 Cleaning Shifts(贪心)

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

  6. POJ 2376 Cleaning Shifts【贪心】

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

  7. poj 2376 Cleaning Shifts

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

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

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

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

    12-喷水装置(二) 内存限制:64MB 时间限制:3000ms 特判: No 通过数:28 提交数:109 难度:4 题目描述: 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n ...

随机推荐

  1. Unity发布Windows程序遇到的问题

    Unity版本:5.6.2 因为程序中使用了Networking模块,所以在打包发布的时候需要登录Unity的账号,并做设置. 错误信息如下: 解决办法如下: 先登录Unity账号,并在Service ...

  2. Linux(Red hat)无网离线安装TensorFlow

    文件下载 首先,下载想要安装的版本,目前最新的是1.8.0 根据你的python版本下载对应的whl文件,下载连接:https://pypi.org/project/tensorflow/#files ...

  3. angularJS1笔记-(1)-多控制器

    前端写好: <div ng-app="myApp"> <div ng-controller="firstController"> < ...

  4. CANOpen学习指南

    对于初学者,相对于其他总线的资料来说,在国内CANOpen的资料并不多.而且并不是所有资料都适合初学者看的.这里给出一些建议,对CANOpen感兴趣的,可以参考一下学习的顺序. 前提:需要对CAN总线 ...

  5. Scrum 项目2.0 3.0

    顺带 MY—HR 成员: 角色分配 学号 博客园 团队贡献分 丘惠敏 PM项目经理 201406114203 http://www.cnblogs.com/qiuhuimin/ 19 郭明茵 用户 2 ...

  6. Delphi中BCD和Currency类型

    用了这些年的Delphi,竟然对Currency及TBCDField一知半解,下文给了很好的讲解,值得一读. 一.       BCD类型 BCD即Binary-Coded Decimal?,在Del ...

  7. cxgrid中,如何根据列名或字段名取得footer值

    注意,不是根据index取得footer值cxgrdtbv1.DataController.Summary.FooterSummaryValues[0]; ------解决方案------------ ...

  8. Java中的多线程科普

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  9. java的日志知识

    java常用的日志有以下几种 : 一.jdk自带的java.util.logging包下的日志功能, 不常用. 二.commons-logging  + log4j 的搭配 .log4j是日志功能的具 ...

  10. (暂时弃坑)(半成品)ACM数论之旅18---反演定理 第二回 Mobius反演(莫比乌斯反演)((づ ̄3 ̄)づ天才第一步,雀。。。。)

    莫比乌斯反演也是反演定理的一种 既然我们已经学了二项式反演定理 那莫比乌斯反演定理与二项式反演定理一样,不求甚解,只求会用 莫比乌斯反演长下面这个样子(=・ω・=) d|n,表示n能够整除d,也就是d ...