币变,再谈动态规划
Coin change,dynamic programming revisited
我很难理解这个问题背后的逻辑,
这是经典的动态规划问题
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个硬币或not.But我不明白'+'在这两种状态之间做了什么
例如
C(N,m)=C(N,m-1)+C(N-dm,m)
^
|
问题可能很愚蠢,但我还是想知道,这样我才能有更好的understanding.Thanks
好吧,你的州没写对!
硬币变化:
令 C(i,j) 表示仅使用 i 个硬币(从 i 到 1)形成 j 的总和的方法数。
现在要获得递归函数,您必须定义转换或状态变化,或者可能只是用较低的值来表达给定的表达式!!
有 2 种独立的 方式可以表示这种状态,它们是
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])
如果您允许重复,我会离开重复!
我很难理解这个问题背后的逻辑, 这是经典的动态规划问题
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个硬币或not.But我不明白'+'在这两种状态之间做了什么
例如
C(N,m)=C(N,m-1)+C(N-dm,m)
^
|
问题可能很愚蠢,但我还是想知道,这样我才能有更好的understanding.Thanks
好吧,你的州没写对! 硬币变化:
令 C(i,j) 表示仅使用 i 个硬币(从 i 到 1)形成 j 的总和的方法数。
现在要获得递归函数,您必须定义转换或状态变化,或者可能只是用较低的值来表达给定的表达式!!
有 2 种独立的 方式可以表示这种状态,它们是
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])
如果您允许重复,我会离开重复!