https://leetcode-cn.com/problems/target-sum/solution/yi-tao-kuang-jia-jie-jue-bei-bao-wen-ti-58wvk/
一、目标和
0-1背包的一种变形,原来适用于求最大值,这道题用于求组合数
/*
0-1背包变形
target = x - y;
sum = x + y;
x = (sum + target) / 2;
用nums中元素组成x,有多少种方法
*/
class Solution {
public int findTargetSumWays(int[] nums, int target) {
int sum = 0;
int n = nums.length;
for (int i : nums) {
sum += i;
}
if (sum < target || (sum + target) % 2 == 1) {
return 0;
}
int s = (sum + target) / 2;
int dp[] = new int[s + 1];
dp[0] = 1;
for (int i = 0; i < n; ++i) {
for (int j = s; j >= nums[i]; --j) {
dp[j] += dp[j - nums[i]];
}
}
return dp[s];
}
}


京公网安备 11010502036488号