分割等和子集
2022-03-31 本文已影响0人
xiaohei_e853
![](https://img.haomeiwen.com/i6018487/bd5cf4629c0b7e28.png)
![](https://img.haomeiwen.com/i6018487/b52c7f6290e5b02f.png)
![](https://img.haomeiwen.com/i6018487/e844e6f2c4b5d2dd.png)
![](https://img.haomeiwen.com/i6018487/f01c1212f08e85c3.png)
![](https://img.haomeiwen.com/i6018487/928e1f363af6cd5a.png)
![](https://img.haomeiwen.com/i6018487/871e089778a0d7dd.png)
第一版代码:
![](https://img.haomeiwen.com/i6018487/18fffd308ee56aa6.png)
![](https://img.haomeiwen.com/i6018487/a21c285360cb317d.png)
只用一维数组解决
![](https://img.haomeiwen.com/i6018487/e25ce03251bb87bc.png)
public class CanPartion {
public static void main(String[] args) {
int[] nums = {1,5,11,5};
canPartion(nums);
}
public static boolean canPartion(int[] nums){
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum +=nums[i];
}
if(sum%2==1){
return false;
}
int target = sum/2;
boolean[] dp = new boolean[target+1];
dp[0] = true;
dp[nums[0]] = true;
for (int i = 0; i <nums.length ; i++) {
for (int j = target; j >0&&j>=nums[i] ; j--) {
int tmp = j-nums[i];
dp[j] = dp[j]||dp[j-nums[i]];
}
}
return dp[target];
}
}