代码随想录算法训练营第四十二天| 01背包问题 二维 一维 理论 416. 分割等和子集

代码随想录算法训练营第四十二天| 01背包问题 二维 一维 理论 416. 分割等和子集

一、力扣416. 分割等和子集

题目链接
思路:划分等和子集,先加和除以2,如果余数是1必不可能划分等和,余数为0,以半数和为背包容量套模板

class Solution {
   public boolean canPartition(int[] nums) {
        int target = 0;
        for (int i = 0; i < nums.length; i++) {
            target += nums[i];
        }
        if (target % 2 == 1) return false;
        target = target / 2;
        int[] bag = new int[target+1];
        for (int i = 0; i < nums.length; i++) {
            for (int j = target; j >= nums[i]; j--) {
                bag[j] = Math.max(bag[j], bag[j - nums[i]] + nums[i]);
            }
            if (bag[target] == target) return true;
        }
        return bag[target] == target;
    }
}

你可能感兴趣的:(算法)