对于硬币兑换问题,我们通常采用以下递推关系:
(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
我写的有什么问题吗?虽然解决方案不是动态的,但不是更有效吗?
最佳答案
考虑P = 6, V = {4, 3, 1}
。你会选择4, 1, 1
而不是3, 3
,因此3
硬币而不是最佳的2
。
关于algorithm - 硬币找零(动态编程),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13075242/