代码随想录——分割等和子集(Leetcode LCR 101)

题目链接
在这里插入图片描述

0-1背包问题

class Solution {
    public boolean canPartition(int[] nums) {
        int[] dp = new int[10000];
        int sum = 0;
        // 首先求背包体积应该为nums数组总和的一半
        for(int i = 0; i < nums.length; i++){
            sum += nums[i];
        }
        // 如果总和为奇数则不存在等和子集
        if(sum % 2 == 1){
            return false;
        }
        int target = sum / 2;
        // 0-1背包,注意一维dp数组先背包后体积,体积倒序遍历保证每个物品只出现一次
        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]);
            }
        }
        // 集合元素正好凑成总和target
        if(dp[target] == target){
            return true;
        }else{
            return false;
        }
    }
}

本题思想:题目中物品是nums[i],重量是nums[i],价值也是nums[i],背包体积是target = sum / 2

如果使用暴力求解,应使用回溯算法。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 04:24:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 04:24:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 04:24:02       58 阅读
  4. Python语言-面向对象

    2024-07-19 04:24:02       69 阅读

热门阅读

  1. LVS的DR模式

    2024-07-19 04:24:02       19 阅读
  2. 前端常用工具库

    2024-07-19 04:24:02       19 阅读
  3. 智能灯光的工作原理

    2024-07-19 04:24:02       19 阅读
  4. 安全防御:防火墙基本模块

    2024-07-19 04:24:02       21 阅读
  5. Qt区分鼠标按下时移动的是哪个多边形

    2024-07-19 04:24:02       19 阅读
  6. Unlink

    Unlink

    2024-07-19 04:24:02      20 阅读
  7. 扩展你的App:Xcode中App Extensions的深度指南

    2024-07-19 04:24:02       25 阅读
  8. 计算机算法思想

    2024-07-19 04:24:02       13 阅读
  9. ApplicationRunner applicationRunner 是什么?

    2024-07-19 04:24:02       19 阅读
  10. 介绍threadlocal

    2024-07-19 04:24:02       18 阅读
  11. cpu100%排查

    2024-07-19 04:24:02       19 阅读
  12. 黑龙江等保2.0新规

    2024-07-19 04:24:02       25 阅读