硬币变化(动态规划)

时间:2012-10-25 18:50:10

标签: algorithm dynamic-programming

我们通常对硬币变化问题采用以下递归关系: (P是我们需要更改的总金额,d_i是可用的硬币)

但我们不能这样做: (V是可用的已分类硬币集,ij是其下标,Vj是给定的最高值硬币。

C[p,Vi,j] = C[p,Vi,j-1]     if Vj > p
          = C[p-Vj,Vi,j] + 1  if Vj <=p

我写的是什么问题?虽然解决方案不是动态的,但效率不高吗?

2 个答案:

答案 0 :(得分:4)

考虑P = 6, V = {4, 3, 1}。您会选择4, 1, 1而不是3, 3,因此3硬币而不是最佳2

答案 1 :(得分:0)

你所写的内容类似于仅在某些条件下有效的贪婪算法。 (见 - How to tell if greedy algorithm suffices for finding minimum coin change?)。

另外,在你的版本中,你实际上并没有在重现中使用Vi,所以这只是浪费内存