这个问题转化为背包问题的描述形式:
有一个背包,最大容量为
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) { |