对于硬币找零问题,我们通常有以下递归关系:(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
是我们需要找零的总金额,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
。
你写的类似于只在特定条件下工作的贪心算法。(请参阅 -如何判断贪心算法是否足以找到最小硬币变化?)。
另外,在您的版本中,您实际上并没有Vi
在重复中使用,所以这只是浪费内存