1.选择不相交区间问题(具体见一本通提高篇P4)
假设已经选择的区间是最优的方案的一部分,下面考虑如何选择会使方案达到最优。
因为是按照结束时间升序排序的,如果我们不选择当前这一个合法的(设为A)而是去选择之后的合法的(设为B),那么无论最后的方案是怎样的,都可以将B换成A从而符合题意。
由数学归纳法,最开始一个都没有选的时候可以看作是最优方案的一部分,因此算法正确
2.区间选点问题(具体见一本通提高篇P6)
假设已经选择的点和被覆盖的区间是最优的方案的一部分(注意我们是按照区间考虑的),下面考虑如何选择会使方案达到最优。
首先是一个前提:如果一个区间(设为A)在被考虑之前已经被若干个点给覆盖了,那么就不用再考虑主动在这个区间上放点了。
因为是按照结束位置升序排序的,对任意一个被考虑主动放点的区间(此时这个区间前面的区间都已经被覆盖了哈,不用考虑了),点都是放在此区间的右端点处最好。若此时还要考虑A,显然没有考虑后面的未被覆盖的区间优(决策包容性,因为是按照结束位置升序排序)
对于当前的状态,我们显然是选择第一个未被覆盖的区间更优(决策包容性)
由数学归纳法,最开始一个点都没有的时候可以看作是最优方案的一部分,因此算法正确
3.区间覆盖问题(具体见一本通提高篇P9)
假设从左到右已经覆盖了一段指定区间了且选择的区间是最优的方案的一部分,下面考虑如何选择会使方案达到最优。
由决策包容性易得,已经被覆盖的指定区间就不用在考虑了,因此一本通直接将\(s\)更新为右端点坐标(不会在后面了,因为决策包容性)
由数学归纳法,最开始一个点都没有被覆盖的时候可以看作是最优方案的一部分,因此算法正确
4.带限期和罚款的单位时间任务调度
跟上面差不多,不妨证明一下