关于区间的贪心问题
选择不相交区间
数轴上有n个开区间,选择尽量多个区间,使得这些区间两两没有公共点。
首先,若有两个区间x和y,区间x完全包含y,那么肯定不用选择x,因为选择y冲突更少,却和x的价值相同。
接下来,按照右端点从小到大给区间排序。有两个贪心策略:第一个是——一定要选择第一个区间,这是显然的,因为右端点在最前面区间是最优的。第二个是要尽可能选择右端点在更左边的区间。
简单来说,就是在区间数目相同时让右端点尽可能小。
区间选点问题
数轴上有n个闭区间,取尽量少的点,使得每个区间内都至少有一个点。
一样,把所有区间按右端点从大到小排序。先来考虑第一个区间里,应该把点放在哪个位置。显然是放在最后更好~~一个一个区间的扫下去,如果发现有一个区间上没有点了,就说明必须要放点了,同样把点放在最后的位置,以此类推直到结束。
区间覆盖问题
数轴上有n个闭区间,选择尽量少的区间覆盖一条指定线段[s, t]。
首先应当进行一次预处理,每个区间在线段外的部分都应该预先被剪掉,因为它们的存在是没有意义的。
这一次应该将个区间按照a从小到大排序。如果区间1的起点不是s,则无解。否则应选择从起点开始的最长区间(这也是贪心),然后忽略所有区间在被选择区间右端点以左的部分,再次开始选择。
简单来说,就是寻找在已经覆盖的区间中出发,最远能到达的位置。