package leetcode;
public class demo_416 {
public boolean canPartition(int[] nums) {
int sum=0;
for (int i : nums) {
sum=sum+i;
}
//全部元素和为偶数,则不存在
if(sum%2!=0) {return false;}
int target=sum/2;
int[] dp=new int[target+1];
dp[0]=1;
//01背包,找出和为target的子数组的个数
for (int i = 0; i < nums.length; i++) {
for(int j=target;j>=nums[i];j--) {
dp[j]=dp[j]+dp[j-nums[i]];
}
}
//如果个数不为0,则一定存在
if(dp[target]!=0) {return true;}
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_416 demo=new demo_416();
int[] nums= {1,5,11,5};
System.out.println(demo.canPartition(nums));
}
}