变更问题有一些修改

时间:2015-02-28 19:13:43

标签: c++ algorithm data-structures greedy coin-change

在使用以下贪婪算法的变更问题中,解决了以下问题:如何用最少数量的硬币来赚取给定金额?

算法:如果可能的话,使用最有价值的硬币。假设我们每个硬币的数量都是无限的。

我的教授写道,(4)不是产生最优解,有人可以说为什么? (或者为什么其他不是反例?)

1- {1,2,5}

2- {1,4,7}

3-{1,5,10}

4-{1,7,10}

1 个答案:

答案 0 :(得分:3)

在需要代表14的情况下,使用来自第4组硬币的贪婪策略不会产生最佳结果:

  • 贪婪的策略将尽快拿走10个,最后以4个便士结束,共计5个硬币
  • 最佳策略是采取两个七人制,共计两个硬币。

很容易看出,如果存在硬币C,如果您使用任何较高面额的硬币,则价值k*C可以由至少k+1硬币组成那么贪心算法就不会成功。

在上一组C=7k=2kC=14中。如果您使用10制作14,则需要五个硬币,大于k