我们通常对硬币变化问题采用以下递归关系:
(P
是我们需要更改的总金额,d_i
是可用的硬币)
但我们不能这样做:
(V
是可用的已分类硬币集,i
和j
是其下标,Vj
是给定的最高值硬币。
C[p,Vi,j] = C[p,Vi,j-1] if Vj > p
= C[p-Vj,Vi,j] + 1 if Vj <=p
我写的是什么问题?虽然解决方案不是动态的,但效率不高吗?
答案 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
,所以这只是浪费内存