例题:
数轴上有
n个闭区间[ai,bi],选择尽量少的区间覆盖一条指定的线段[s,t]。
思路:
- 枚举所有可用区间,把可能覆盖目标区间的区间(只要不是起点终点都小于
s或都大于t就符合条件)记录下来,并按起点升序和长度降序排序 - 记录未覆盖区间的起点
s,枚举所有可能覆盖目标区间的区间 - 如果当前区间的起点
ai大于未覆盖区间的起点s,则覆盖失败(ps.此时剩余的所有区间都无法覆盖s这个点),结束 -
选用区间:否则选取第一个(最长的),将未覆盖区间的起点重新赋值为
bi,依然记为s(原因是[s,bi]已经被[ai,bi]覆盖,剩下未覆盖区间为[bi,t]) - 如果未覆盖区间起点
s大于未覆盖终点t(说明[s,t]完全被[ai,bi]覆盖) ,覆盖成功,结束 - 跳过起点为
ai的其余区间,返回第3步,继续枚举







网友评论