【问题标题】:Coin change,dynamic programming revisited硬币变化,重新审视动态规划
【发布时间】:2015-07-20 02:25:16
【问题描述】:

我很难理解这个问题背后的逻辑, 这是经典的动态规划问题

     Coin Change is the problem of finding the number 
     of ways of making changes for a particular amount of cents, n, 
     using a given set of denominations d1,d2,..dm;

我知道递归是如何工作的,无论是否拿走第 m 个硬币。但我不明白 '+' 在两种状态之间有什么作用。

例如

        C(N,m)=C(N,m-1)+C(N-dm,m)
                       ^
                       |

问题可能很愚蠢,但我仍然想知道,以便我能更好地理解。谢谢

【问题讨论】:

    标签: dynamic-programming


    【解决方案1】:

    好吧,你写的状态不对! 硬币变化:

    令 C(i,j) 表示仅使用 i 个硬币(从 i 到 1)将 j 形成为总和的方式数。

    现在要获得递归函数,您必须定义转换或状态更改,或者可能只是用较低值的形式表达给定的表达式!

    我可以通过两种独立方式来表示这种状态

    1) 让我们拿起第 i 个硬币,然后会发生什么?如果不允许重复,我需要面额 j-Denomination[i] 和 i-1 个硬币。 即 C(i,j)= C(i-1,j-Denominations[i])

    但是等等,我们错过了一些方法,即当我们不拿当前的硬币时

    2) C(i,j)=C(i-1,j)

    现在由于它们都是独立且详尽的,这两种状态构成了方式的总数!!!

    C(i,j)=C(i-1,j)+C(i-1,j-面额[i])

    当你允许重复时,我将离开重复!

    【讨论】:

    • "现在它们都是独立且详尽的"-这是我一直在寻找的行"。在两者之间使用 '+' 与我们所做的或在组合学中相同?即"要么这个或者那样”
    • 没错!!不管是这样还是那样!!没有其他可能的方法,也没有重复!!
    • 非常感谢...你帮了很多忙 :)
    • 请理解独立我的意思是使当前状态的独立方法!而不是彼此独立
    猜你喜欢
    • 2023-03-20
    • 2018-02-25
    • 2012-11-24
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多