这个问题转化为背包问题的描述形式:
有一个背包,最大容量为
amount,有一系列物品coins,每个物品的重量为coins[i],每个物品的数量无限。请问有多少种方法,能够把背包恰好装满?若只使用
coins中的前i个硬币的面值,若想凑出金额j,有dp[i][j]种凑法。如果你不把这第
i个物品装入背包,也就是说你不使用coins[i]这个面值的硬币,那么凑出面额j的方法数dp[i][j]应该等于dp[i-1][j],继承之前的结果。如果你把这第
i个物品装入了背包,也就是说你使用coins[i]这个面值的硬币,那么dp[i][j]应该等于dp[i][j-coins[i-1]]。
1 | public int change(int amount, int[] coins) { |