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

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

  • 相关阅读:
    Badboy录制脚本时,提示脚本错误解决方法
    Python数据类型_列表
    Wannafly Primary School Students训练记录
    Deadline队伍训练实录
    2018 German Collegiate Programming Contest (GCPC 18)
    2016ccpc杭州
    2016 ICPC 大连
    2017CCPC Final (哈尔滨)
    2017CCPC 长春
    2017 CCPC 杭州
  • 原文地址:https://www.cnblogs.com/mowanying/p/11815979.html
Copyright © 2011-2022 走看看