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]; } }