贪心算法
例题:修复牛栏(1999年USACO春季公开赛)
现在我们有一排牛栏,但其中的一些需要修复(就是拿块木板去修理),你最多能使用N(1 ≤ N ≤ 50)块木板,其中每一块木板可以搞定连续的Mi个牛栏。你的任务是使用最少的木板数搞定所有需要修复的牛栏。
想法:
贪心算法最基本的思路是“从一个大型问题较小的部分开始解决,一步一步以至于完成整个问题”(编者说一句:这里我的理解是假如有规模为N的问题,我们可以先试着解决规模为1时的最优情况。接下来在1最优的基础上,加上第2部分…直到把N部分处理完毕)。然而,和其他方法不同的是,贪心算法在每一步的计算中只采用仅对这一步来说最优的方案,而非环顾全局。所以,如果用上面的例题做例子的话,贪心算法在计算N = 5时的方案时,会先了解并沿用N = 4时的最优方案,然后在N = 4最优方案的基础上计算得到N = 5时的最优方案。在这里,N = 4时的除了最优方案之外的任何方案都没有被考虑在内(都被永远的丢掉了)。
贪心算法非常快,时间复杂度