C++ 代码
class Solution {
public:
int findTargetSumWays(vector<int>& nums, int target)
{
int sum = 0;
for (auto &x : nums)
sum += x;
if (target > sum)
return 0;
if ((sum + target)%2 == 1)
return 0;
int positive = 0;
//positive - nagetive = target 正 - 负 = 目标值(这个负只是带负号的那些数之和 是正的)
//positive + nagetive = sum
positive = (sum + target)/2; //这是背包的容量
// cout << "positive " << positive;
vector<int> dp(positive+1, 0);
dp[0] = 1;
int len = nums.size();
for (int i = 0; i < len; i++)
{
for (int j = positive; j >= nums[i]; j--)
{
dp[j] += dp[j - nums[i]];
// cout << "dp[" << j << "]" << " : " << dp[j] << " ";
}
// cout << endl;
}
return dp[positive];
}
};