例题:
数轴上有
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步,继续枚举
网友评论