我需要找到组成一定金额的硬币的最佳组合。所以基本上,我想用最少量的硬币到达那里。确定一美元金额的最佳硬币组合
例如:
如果一个货币系统具有硬币:{13,8,1},贪婪溶液将使24变化为{13,如图8所示,1,1,1},但真正的最佳解决方案是{8,8,8}。
我期待着用Javascript写这篇文章,但伪码很好,因为我确信这会帮助更多的人。
我需要找到组成一定金额的硬币的最佳组合。所以基本上,我想用最少量的硬币到达那里。确定一美元金额的最佳硬币组合
例如:
如果一个货币系统具有硬币:{13,8,1},贪婪溶液将使24变化为{13,如图8所示,1,1,1},但真正的最佳解决方案是{8,8,8}。
我期待着用Javascript写这篇文章,但伪码很好,因为我确信这会帮助更多的人。
一般来说,问题实际上是NP完全的(见Change-making problem)。然而,对于许多货币系统(包括美国的{1,5,10,25}系统),贪婪算法也恰好是最优的。
+1发布链接显示这是一个众所周知的问题。 – 2010-10-08 23:48:40
此问题尖叫动态编程。
基本伪代码应该是像这样:
请注意,该算法适用于您所指的一般情况。对于任何其他的硬币系统,每个硬币都是其后的硬币(世界上大多数投币系统)的除数 - 贪婪解决方案是最简单的,并且是最优的。
http://en.wikipedia.org/wiki/Knapsack_problem和http://stackoverflow.com/search?q=knapsack+problem – 2010-10-08 23:40:54