leetcode:416.分割等和子集

背包问题0-1背包

0-1背包是每个物品只能使用一次;

完全背包每个物品可以无限次使用;

0-1背包

二维dp数组
  1. dp[i][j]下标为0-i之间的物品任意取放进背包为j的背包里
  2. 不放物品i表示dp[i-1][j]; 放物品i变成dp[i-1][j - weight[i]] + value[i] 最后取两者最大值
  3. 初始化
  4. 遍历顺序:两层for循环,二维dp数组实现的都可以交换循序,

题目链接

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

示例 1:

输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。

示例 2:

输入:nums = [1,2,3,5]
输出:false
解释:数组不能分割成两个元素和相等的子集。

解题思路

容量为sum(nums // 2)的背包可以装满吗

每个元素只能使用一次

  1. dp[j]表示的含义是,容量为j的背包最大价值为dp[j]
  2. 背包装满的表达式为dp[target] = target
  3. dp[j] = max(dp[j], dp[j - weight[j]] + value[i])其实是二维数组的状态压缩
  4. 初始化:dp[0] = 0   dp其他初始化0
  5. 遍历顺序,01背包的遍历顺序,遍历物品,背包,因为进行了状态压缩,所以不可以交换顺序。
class Solution:
    def canPartition(self, nums: List[int]) -> bool:
        target = sum(nums)
        if target % 2 == 1: return False
        target //= 2
        dp = [0] * (target + 1)
        for i in range(len(nums)):
            for j in range(target, nums[i] - 1, -1):
                dp[j] = max(dp[j], dp[j - nums[i]] + nums[i])
        return target == dp[target]

感觉这个二维数组压缩成一维数组没太看懂

相关推荐

  1. leetcode:416.分割子集

    2024-04-05 19:34:02       36 阅读
  2. LeetCode 416. 分割子集

    2024-04-05 19:34:02       37 阅读
  3. Day41| 416 分割子集

    2024-04-05 19:34:02       46 阅读
  4. Day42| Leetcode 416. 分割子集

    2024-04-05 19:34:02       71 阅读
  5. 动态规划 Leetcode 416 分割子集

    2024-04-05 19:34:02       45 阅读
  6. 416. 分割子集(力扣LeetCode

    2024-04-05 19:34:02       40 阅读

最近更新

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

    2024-04-05 19:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 19:34:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 19:34:02       82 阅读
  4. Python语言-面向对象

    2024-04-05 19:34:02       91 阅读

热门阅读

  1. 软件开发与设计的哲学思想一

    2024-04-05 19:34:02       37 阅读
  2. 3.创建型模式--创建者模式

    2024-04-05 19:34:02       33 阅读
  3. mybatis报错无法update数据

    2024-04-05 19:34:02       37 阅读
  4. 前端和后端在软件开发中的两个重要部分

    2024-04-05 19:34:02       37 阅读
  5. 树状数组模板

    2024-04-05 19:34:02       42 阅读
  6. 自动化缺陷检测:提升产品质量的关键

    2024-04-05 19:34:02       34 阅读
  7. 谷歌(Google)技术面试概述

    2024-04-05 19:34:02       35 阅读
  8. 逻辑回归都有什么类型

    2024-04-05 19:34:02       27 阅读
  9. RKE2部署k8s集群实战

    2024-04-05 19:34:02       36 阅读
  10. docker入门

    2024-04-05 19:34:02       45 阅读
  11. QT之单例模式

    2024-04-05 19:34:02       38 阅读
  12. 软件测试用例(3)

    2024-04-05 19:34:02       41 阅读