贪心-区间覆盖

2019-10-04  本文已影响0人  星回壹玖

例题:

数轴上有n个闭区间[ai,bi],选择尽量少的区间覆盖一条指定的线段[s,t]

思路:

  1. 枚举所有可用区间,把可能覆盖目标区间的区间(只要不是起点终点都小于s或都大于t就符合条件)记录下来,并按起点升序和长度降序排序
  2. 记录未覆盖区间的起点s,枚举所有可能覆盖目标区间的区间
  3. 如果当前区间的起点ai大于未覆盖区间的起点s,则覆盖失败(ps.此时剩余的所有区间都无法覆盖s这个点),结束
  4. 选用区间:否则选取第一个(最长的),将未覆盖区间的起点重新赋值为bi,依然记为s(原因是[s,bi]已经被[ai,bi]覆盖,剩下未覆盖区间为[bi,t])
  5. 如果未覆盖区间起点s大于未覆盖终点t(说明[s,t]完全被[ai,bi]覆盖) ,覆盖成功,结束
  6. 跳过起点为 ai的其余区间,返回第3步,继续枚举
每次选用的区间都是当前最优,符合贪心原则
上一篇下一篇

猜你喜欢

热点阅读