day41

1、leetcode416 分隔等和子集

  1. 转化为01背包问题
    1. 背包的体积为sum / 2
    2. 背包要放入的商品(集合里的元素)重量为 元素的数值,价值也为元素的数值
    3. 背包如果正好装满,说明找到了总和为 sum / 2 的子集。
    4. 背包中每一个元素是不可重复放入。
class Solution {
    public boolean canPartition(int[] nums) {
        int sum = 0;
        for(int num : nums) sum += num;

        if(sum % 2 == 1) return false;
        int target = sum / 2; 
        int dp[] = new int[target + 1];

        for(int i=0; i<nums.length; i++) {
            for(int j=target; j>=nums[i]; j--) {
                dp[j] = Math.max(dp[j], dp[j-nums[i]]+nums[i]);
            }
        }

        return dp[target] == target;
    }
}
posted @ 2023-02-28 00:00  黄三七  阅读(19)  评论(0)    收藏  举报