package leetcode;
public class demo_494 {
public int findTargetSumWays(int[] nums, int target) {
int sum=0;
for(int i=0;i<nums.length;i++) {
sum=sum+nums[i];
}
//sum-target是两个相同负子集的和,如果找不出负子集则肯定不存在
if((sum-target)%2!=0||sum<target) {
return 0;
}
//01背包问题,找出满足全部负子集和的可能性
int size=(sum-target)/2;
int dp[]=new int[size+1];
dp[0]=1;
for (int i = 0; i < nums.length; i++) {
//如果加入的num[i]超过了需要计算的和,则肯定不加入到计算中
for(int j=size;j>=nums[i];j--) {
dp[j]=dp[j]+dp[j-nums[i]];
}
}
System.out.println(dp[size]);
return dp[size];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_494 demo=new demo_494();
int nums[]= {1,1,1,1,1};
demo.findTargetSumWays(nums, 3);
}
}