【题解】POJ 2376 Cleaning Shifts(贪心)

农夫约翰需要安排奶牛进行清洁工作,每头牛有特定的工作时段。目标是确保每个班次至少有一头牛工作,同时使用最少的奶牛。这是一个区间覆盖问题,可以使用贪心策略解决,按结束时间选择最晚的线段,逐步覆盖所有班次。如果无法覆盖所有班次,则输出-1。
摘要由CSDN通过智能技术生成

POJ 2376 Cleaning Shifts


原题

https://vjudge.net/problem/POJ-2376

农夫约翰指派他的N (1 <= N <= 25,000)头牛在谷仓周围做一些清洁杂务。他总是希望有一头牛来打扫卫生,他把一天分成了T班(1 <= T <= 1,000,000),第一个班是1班,最后一个班是T班。
每头牛只能在一天的某些时段进行清洁工作。任何被选来做清洁工作的牛都会在整个休息期间一直工作。
你的工作是帮助农民约翰分配一些奶牛轮班,这样(i)每个轮班至少有一头奶牛被分配,(ii)尽可能少的奶牛参与清洁。如果无法为每个班次分配一个cow,打印-1。
输入:
第1行:两个空格分隔的整数:N和T
第2行…N+1:每一行包含奶牛可以工作的时间间隔的开始和结束时间。牛在开始的时间开始工作,在结束的时间结束。
输出*第1行:农场主John需要雇佣的奶牛的最小数量,如果不可能在每个班次分配一头奶牛,则为-1。

Sample Input

3 10
1 7
3 6
6 10

Sample Output

2

提示此问题输入数据量大,使用scanf()代替cin来读取数据,避免超过时间限制。
输入详细信息:有3头奶牛和10个班次。牛1号可以倒班。奶牛2号可以倒班奶牛3号可以倒班 输出详细信息:通过选择奶牛1号和3号,覆盖了所有的轮班。用不到2头牛是无法覆盖所有轮班的。


题解

题意:有一个长度为T的线段,现在给你N个小的线段,要求使用最少的小线段覆盖整个大线段。
思路:典型的区间贪心问题,遍历线段上的每一个点,确保该点被覆盖,每次都选取右端点最远的线段,并且跳到该线段右端点的下一个点。

#include
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值