硬币改变,动态编程重新审视

时间:2015-07-19 17:31:17

标签: dynamic-programming

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

     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;

我知道递归是如何起作用的,就像拿硬币一样。但是我不明白两个州之间的'+'做什么。

例如

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

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

1 个答案:

答案 0 :(得分:1)

好吧,你还没有写好你的州! 硬币变化:

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

现在要获得一个递归函数,你必须定义转换或改变状态,或者只是用较低值来表达给定的表达式!!

有两种独立的方式可以代表

这种状态

1)让我们拿起第i个硬币,然后会发生什么?如果不允许重复,我需要使用i-1硬币进行面额j-Denomination [i]。 即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])

我会在重复允许的情况下重复发生!