码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2376 Cleaning Shifts

时间:2018-05-13 13:39:24      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:否则   最大   情况   递增   clean   一个   记录   覆盖   shift   

题意: 给定若干子区间,以及目标区间,用最少的子区间覆盖目标区间。若无法实现,输出-1;

思路:

因为每取一个,花费都是1,所以可以使用贪心。(否则要用DP)子区间按照左端点由小到大排序,记录已被覆盖区间,每次找到左端点在[1~r+1]中的右端点的最大值,用有这个最大值的子区间参与覆盖。ans++;

若中途断档,或者循环n之后没有覆盖完[1~r],则输出-1;

证明:

输出-1的做法易证。至于可以成立的情况,那么必然每个格子都要染色,从左边开始,若[1~r]已经被染色,因为已排序,所以之后的区间左端点递增,若左端点>r+1,则此时必须要用一个区间染色了。所以必然要尽可能往右里染色。

代码:POJ 2376 Cleaning Shifts

POJ 2376 Cleaning Shifts

标签:否则   最大   情况   递增   clean   一个   记录   覆盖   shift   

原文地址:https://www.cnblogs.com/Miracevin/p/9031526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!