classSolution{publicbooleancanPartition(int[] nums){int n = nums.length;int sum =0;for(int num : nums){
sum += num;}if(sum %2!=0)returnfalse;int dp[]=newint[sum /2+1];for(int i =0; i < n; i++){for(int j = sum /2; j >= nums[i]; j--){
dp[j]=Math.max(dp[j], dp[j - nums[i]]+ nums[i]);}if(dp[sum /2]== sum /2)returntrue;}returnfalse;}}
classSolution{publicbooleancanPartition(int[] nums){int n = nums.length;int sum =0;for(int num : nums){
sum += num;}if(sum %2!=0)returnfalse;int target = sum /2;boolean dp[]=newboolean[target +1];
dp[0]=true;for(int i =0; i < n; i++){for(int j = sum /2; j >= nums[i]; j--){
dp[j]= dp[j]|| dp[j - nums[i]];}}return dp[target];}}