zoukankan      html  css  js  c++  java
  • 区间覆盖问题总结(贪心)

    1.求一个区间是否包含另一个小区间:将两种区间都按右端点排序,每一次比较左端点是否包含在内即可。
    2.最少的区间覆盖一段长度:按照左端点递增,如果左端点相同右端点也递增排序(递减是一样的),每一次这样贪心地选:
    记录最远能覆盖距离mx,跳过右端点小于等于mx的情况,选左端点刚好在mx范围内,且右端点最远的线段。
    模拟一下即可。
    3.选择尽量少的点,覆盖所有所有线段:按左端点递增,右端点递增,每一次贪心地将点往后放,使得其放在多个线段的重叠部分,如果某一线段的左端点超出范围,ans++。
    注意一下这种情况:
    -------
       --
          -----
    第二根线段明显可以将范围缩小,所以要记录目前选点的范围,把右端点更小的更新到范围里面。
    ------
           ------
    这种情况明显就要将ans++,右端点变成下面的那一个了。
    4.选出多个区间,使得区间没有公共交点:
    误区:按照左端点递增排序,再按右端点递增排序。
    反例:
    ---------
      --
         --
    选了第一个区间,后面两个都没有机会了。
    正解:按右端点递增排序,再按左端点递增排序。
    总结:除了第四种,都可以按左端点单增排序,然后贪心地选。
    更详细地证明:https://www.cnblogs.com/acgoto/p/9824723.html

  • 相关阅读:
    CSwinform程序分页
    C#跨线程访问控件
    CS程序发布版本后提示自动升级功能
    winform控件的二次开发
    JavaNetty拆包粘包(二)
    JavaNetty(一)
    JavaAIO编程
    javaNIO编程
    Java中bio编程
    如何使用CryptoJS配合Java进行AES加密和解密
  • 原文地址:https://www.cnblogs.com/mowanying/p/11815979.html
Copyright © 2011-2022 走看看