494. 目标和

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

}

 

posted on 2022-04-26 21:31  一仟零一夜丶  阅读(38)  评论(0)    收藏  举报