假设要用很多个教室对一组活动进行调度。我们希望使用尽可能少的教室来调度所有的活动。请给出一个有效的贪心算法,来确定哪一个活动应该使用哪一个教室。

(这个问题也被称为区间图着色)问题。我们可以作出一个区间图,其顶点为已知的活动,其边连接着不兼容的活动。为使任两个相邻结点的颜色均不同,所需的最少颜色数对应于找出调度给定的所有活动所需的最少教室数。

最优子结构:

设S为原问题所有活动的集合;

设A为原问题的最优解;现在去除任意一种颜色×(设其所容纳的活动的集合为Sx);那么其剩余的方案为子问题S-Sx的最优解;若不是着可设能找到颜色数更少的方案;那么这种方案加上最后一颜色x所组成的方案比假设的最优解所用的方案数少;导出矛盾,所以A是最优解。

其最优子结构是:

C[M] =  min(C[M-x]) + 1

递归动态规划解:

 

 

递归贪心解:

 

迭代贪心解: