选点问题

类似的问题:活动安排问题和区间覆盖问题。

数轴上有n个闭区间[ai, bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。

如果区间i内已经有一个点被取到,我们称此区间已经被满足。我们先讨论区间包含的情况。由于小区间被满足时大区间一定也被满足。所以在区间包含的情况下,大区间不需要考虑。
把所有区间按b从小到大排序(b相同时a从大到小排序),则需要考虑的区间的a值也是从小到大排好序的(其他区间都不需要考虑)。第一个区间应该取哪一个点呢?

我们的贪心策略是:取最后一个。

选点问题_第1张图片


如果不是取最后一个,比如说灰色点,那么把它移动到最后一个点后被满足的区间增加了,而且原先被满足的区间现在一定被满足。不难看出,这样的贪心策略是正确的。

你可能感兴趣的:(选点问题)