代码随想录 背包问题 | 分割等和子集

背包问题

背包问题

解题思路

二维

还是动态规划的五部曲。

  1. 通过设置一个二维数组来建立一个背包容量和物体重量的关系。dp[i][j],i代表当前背包的容量,j代表一种物体
  2. 找到递归关系:由于我们要找到符合塞满背包的物体,因此我们的dp需要比较放物体前后的值,然后取大的那个。
  3. 初始化数组:在背包容量为0时,由于装不了任何物品,所以全取零。而当我们放置物体1时,为所有满足物体一容量的格子赋予物体1的价值
  4. 确定遍历顺序:按照物体的质量和背包的容量大小进行迭代,对于每一个物体,我们都需要遍历所有能放的下它的容量。
  5. 枚举,通过手写举例得到最后结果

一维

需要更改第一步和第4步,在一维中,我们只要考虑当前的格子是否要放入物体,第四步我们要注意从后往前遍历,因为从前往后会让我们重复放入物体。

知识点

背包,动态规划

心得

挺难的一道题,我直接选择看题解

分割等和子集

分割等和子集

解题思路

把题目转换为是否存在一个集合,能够装满总和的1/2,随后套用01背包的解放就行

知识点

背包

心得

难点在于想到如何将题目转化为背包问题

posted @ 2024-07-26 00:56  不进育碧不改名  阅读(95)  评论(0编辑  收藏  举报