[494][中等][动态规划][背包] 目标和
题目描述
输入:nums: [1, 1, 1, 1, 1], S: 3
输出:5
解释:
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
一共有5种方法让最终目标和为3。解题思路
最后更新于
输入:nums: [1, 1, 1, 1, 1], S: 3
输出:5
解释:
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
一共有5种方法让最终目标和为3。最后更新于
class Solution:
def findTargetSumWays(self, nums: List[int], S: int) -> int:
total = sum(nums)
if total < S or total < -S:
return 0
if (total + S) % 2:
return 0
target = (total + S) // 2
dp = [0] * (target + 1)
dp[0] = 1
for i in range(len(nums)):
for j in range(target, nums[i] - 1, -1):
dp[j] = dp[j] + dp[j - nums[i]]
return dp[-1]