关于区间相关贪心算法的讨论,点击这里,有一份详细的资料,还有几个问题没有说到 《浅谈信息学竞赛中的区间问题》
在贪心算法的层面上,我们能够进行解决的区间覆盖,指的就是最小区间覆盖问题。
问题描述为:
给定n个区间和一个范围[a, b],选择尽量少的区间,使得[a, b]能够被完全覆盖。
贪心的策略我们可以思考一下:
- 对于当前区间[a,b]来说,选择的下一个区间的左端点值a2一定不会大于b,否则就不能完成“覆盖”这一操作。
- 对于当前区间[a,b]来说,如果有多个区间都满足条件1,那么一定选择右端点最大的区间,否则就不能满足“最小”这一目的。
也不是很难嘛~~
同样的,我们需要对区间进行排序,并且排序方法还是那样,按照左右端点都无所谓。反正需要的只是一个有序的列表而已。
那么我们可以尝试着写出如下伪代码:
while(剩余区间数目不为0)
{
if(总长度已经超出覆盖范围)
{
结束循环;
}
for(循环查找符合条件的下一个最大区间);
if(找到了)
{
答案数+1;
总长度 += 最大能切换的区间长度;
}else
{
表示不能完全覆盖,退出循环,答案数 = 0;
}
}<