描述
给出 n 个物品, 以及一个数组, nums[i]代表第i个物品的大小, 保证大小均为正数并且没有重复, 正整数 target 表示背包的大小, 找到能填满背包的方案数。
说明
每一个物品可以使用无数次
样例
- 样例1
输入: nums = [2,3,6,7] 和 target = 7
输出: 2
解释:
方案有:
[7]
[2, 2, 3]
- 样例2
输入: nums = [2,3,4,5] 和 target = 7
输出: 3
解释:
方案有:
[2, 5]
[3, 4]
[2, 2, 3]
解析
class Solution:
def backPackIV(self, nums, target):
# write your code here
dp = [[0 for j in range(target+1)] for i in range(len(nums))]
for j in range(target+1):
if j%nums[0] == 0:
dp[0][j] = 1
for i in range(1, len(nums)):
for j in range(0, target+1):
if j >= nums[i]:
k = j - nums[i]
while (k >= 0):
dp[i][j] += dp[i - 1][k]
k = k - nums[i]
dp[i][j] += dp[i-1][j]
return dp[-1][-1]