1.leetcode 494题
![]()
![]()
![]()
//转换为0/1背包问题,求解在bagsize为某值的时候,有多少种组合方式,dp[j]表示在容量为j的情况下,有多少种组合方式
def findTargetSumWays(self, nums: List[int], target: int) -> int:
sumValue = sum(nums)
if target > sumValue or (sumValue + target) % 2 == 1:
return 0
bagSize = (sumValue + target) // 2
dp = [0] * (bagSize + 1)
dp[0] = 1
//外层遍历,用来判断加上nums[i]后,满足内层各种容量j的情况有多少种,
//每加遍历一个nums[j],dp[j]就更新一次,相当于随着物品的增加,不断更新来判断
//遍历变nums后,dp[j]各容量的真实情况就全部更新完毕了
for i in range(len(nums)):
for j in range(bagSize, nums[i] - 1, -1):
dp[j] += dp[j - nums[i]]
return dp[bagSize]