鉴于硬币面额清单,我需要找到获得给定价值所需的最小硬币数量。
我使用贪婪算法的方法,
以最大面额划分价值,取剩余价值除以第二最大面额等,直至获得所需价值。
但是这种方法在某些情况下失败了。
我想知道
接近失败的示例。
硬币面额(1,3,4,5)
需要值 7
使用贪婪的方法
(7/5)= 1和+2因为3和4不能使用所以我们需要使用2 1的值硬币。共有3个硬币。
然而,最佳值是4 + 3(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,在这种情况下不会失败。