硬币找零问题:
问题描述:
假设需要找零的金额为C,最少要用多少面值为 P1 < P2 < … < pn 的硬币(面值种类为 n,且假设每种面值的硬币都足够多)?
贪心算法在计算的时候,从最大面值的硬币开始,虽然看似非常简便迅速,但是它不总是有效的。比如若市面上有三种面值的硬币(1元、3元、4元),当要找零6元时,它得到的答案是 1 枚 4 元硬币和 2 枚 1 元硬币,即最少 3 枚硬币。而动态规划得到的正确答案是 2 枚 3 元硬币。这个时候贪心算法不再适用,应选用动态规划等其他算法进行求解。
活动安排问题:
问题描述:
学校的礼堂经常开展各类活动,这些活动的开始和结束时间各异,且可能出现重叠,为了开展尽可能多的活动,要怎么安排?
目标是在固定的教室中尽量多地安排活动,可以考虑的贪心策略有“总是选择最早开始的”、“总是选择时间最短的”、“总是选择与其他活动冲突最少的”、“总是选择结束时间最早的”。在这里,我们用总是选择结束时间最早的活动这一选择方案作为解题的贪心策略。(不过上面,有的方案是不能得到最优解的)
参考实现:
通过比较下一个活动的开始时间与上一个活动的结束时间的大小关系,确定这两个活动是否是相容的,如果开始时间大于结束时间则相容,否则不相容。
代码如下: