Hackerrank The Coin Change Probl

2019-04-01  本文已影响0人  不动点P

这是一道比较简单的一维dp问题。给一个数字n,然后再给m种不同面值的硬币,求这个数字能被这些硬币以多少种组合方式组合起来。

状态就选择成 dp(n)dp(n) 设为n被组合起来的方式。
我们手上有m个硬币,设为c1,c2....cm
dp(n) = \sum_{i=1}^{m} dp(n-ci)
dp(ci) = 1, i = 1...m

所以代码如下:

def getWays(n, c):
    dp = [1] + [0] * n
    for i in range(len(c)):
        for j in range(c[i],n+1):
            dp[j] += dp[j - c[i]]
    
    return dp[-1]
上一篇 下一篇

猜你喜欢

热点阅读