首页 文章

硬币变化(动态规划)

提问于
浏览
2

我们通常会对硬币更改问题采取以下递归关系:( 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

    考虑 P = 6, V = {4, 3, 1} . 你会选择 4, 1, 1 而不是 3, 3 ,所以 3 硬币而不是最佳 2 .

  • 4

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

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

相关问题