获得价值所需的最少硬币数量

时间:2014-05-19 08:56:04

标签: algorithm greedy

鉴于硬币面额清单,我需要找到获得给定价值所需的最小硬币数量。

我使用贪婪算法的方法,

以最大面额划分价值,取剩余价值除以第二最大面额等,直至获得所需价值。

但是这种方法在某些情况下失败了。

我想知道

  1. 适用于所有情况的方法
  2. 为什么贪婪的方法失败了?
  3. 接近失败的示例。

    硬币面额(1,3,4,5)

    需要值 7

    使用贪婪的方法

    (7/5)= 1和+2因为3和4不能使用所以我们需要使用2 1的值硬币。共有3个硬币。

    然而,最佳值是4 + 3(2个硬币)。

2 个答案:

答案 0 :(得分:3)

你所描述的问题有一个经典的解决方案 - 一种背包问题。 它可以使用动态编程方法解决。 有关明确说明,请参阅此tutorial

答案 1 :(得分:0)

让我们说,你想得到价值" 2,10€"并且有一个值为2,1,0.50,3倍的硬币0.20。

贪婪总是先拿最大的硬币,所以它会选择价值2的硬币。 现在不再可能达到2,10,因为你没有值为0.10的硬币,即使你可以选择1个,0.50个和0.20个硬币也是可能的。

在这种情况下(就像大多数情况一样)我建议你使用Backtracking,在这种情况下不会失败。