步步为营(六)贪心(5)最小区间覆盖问题

关于区间相关贪心算法的讨论,点击这里,有一份详细的资料,还有几个问题没有说到 《浅谈信息学竞赛中的区间问题》
在贪心算法的层面上,我们能够进行解决的区间覆盖,指的就是最小区间覆盖问题
问题描述为:

给定n个区间和一个范围[a, b],选择尽量少的区间,使得[a, b]能够被完全覆盖。

贪心的策略我们可以思考一下:

  1. 对于当前区间[a,b]来说,选择的下一个区间的左端点值a2一定不会大于b,否则就不能完成“覆盖”这一操作。
  2. 对于当前区间[a,b]来说,如果有多个区间都满足条件1,那么一定选择右端点最大的区间,否则就不能满足“最小”这一目的。

也不是很难嘛~~
同样的,我们需要对区间进行排序,并且排序方法还是那样,按照左右端点都无所谓。反正需要的只是一个有序的列表而已。

那么我们可以尝试着写出如下伪代码:

while(剩余区间数目不为0)
{
    if(总长度已经超出覆盖范围)
    {
        结束循环;
    }
    for(循环查找符合条件的下一个最大区间);
    if(找到了)
    {
        答案数+1;
        总长度 += 最大能切换的区间长度;
    }else
    {
        表示不能完全覆盖,退出循环,答案数 = 0;
    }
}<
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值