背包总结及其前5个文件连接更新

This commit is contained in:
XuDaHaoRen
2021-08-25 09:31:52 +08:00
parent 6b729caf1f
commit 0628f856fc
4 changed files with 26 additions and 26 deletions

View File

@ -30,30 +30,30 @@
## 背包递推公式 ## 背包递推公式
问能否能装满背包或者最多装多少dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]); ,对应题目如下: 问能否能装满背包或者最多装多少dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]); ,对应题目如下:
* [动态规划416.分割等和子集](https://mp.weixin.qq.com/s/sYw3QtPPQ5HMZCJcT4EaLQ) * [动态规划416.分割等和子集](https://programmercarl.com/0416.分割等和子集.html)
* [动态规划1049.最后一块石头的重量 II](https://mp.weixin.qq.com/s/WbwAo3jaUaNJjvhHgq0BGg) * [动态规划1049.最后一块石头的重量 II](https://programmercarl.com/1049.最后一块石头的重量II.html)
问装满背包有几种方法dp[j] += dp[j - nums[i]] ,对应题目如下: 问装满背包有几种方法dp[j] += dp[j - nums[i]] ,对应题目如下:
* [动态规划494.目标和](https://mp.weixin.qq.com/s/2pWmaohX75gwxvBENS-NCw) * [动态规划494.目标和](https://programmercarl.com/0494.目标和.html)
* [动态规划518. 零钱兑换 II](https://mp.weixin.qq.com/s/PlowDsI4WMBOzf3q80AksQ) * [动态规划518. 零钱兑换 II](https://programmercarl.com/0518.零钱兑换II.html)
* [动态规划377.组合总和Ⅳ](https://mp.weixin.qq.com/s/Iixw0nahJWQgbqVNk8k6gA) * [动态规划377.组合总和Ⅳ](https://programmercarl.com/0377.组合总和Ⅳ.html)
* [动态规划70. 爬楼梯进阶版(完全背包)](https://mp.weixin.qq.com/s/e_wacnELo-2PG76EjrUakA) * [动态规划70. 爬楼梯进阶版(完全背包)](https://programmercarl.com/0070.爬楼梯完全背包版本.html)
问背包装满最大价值dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); ,对应题目如下: 问背包装满最大价值dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); ,对应题目如下:
* [动态规划474.一和零](https://mp.weixin.qq.com/s/x-u3Dsp76DlYqtCe0xEKJw) * [动态规划474.一和零](https://programmercarl.com/0474.一和零.html)
问装满背包所有物品的最小个数dp[j] = min(dp[j - coins[i]] + 1, dp[j]); ,对应题目如下: 问装满背包所有物品的最小个数dp[j] = min(dp[j - coins[i]] + 1, dp[j]); ,对应题目如下:
* [动态规划322.零钱兑换](https://mp.weixin.qq.com/s/dyk-xNilHzNtVdPPLObSeQ) * [动态规划322.零钱兑换](https://programmercarl.com/0322.零钱兑换.html)
* [动态规划279.完全平方数](https://mp.weixin.qq.com/s/VfJT78p7UGpDZsapKF_QJQ) * [动态规划279.完全平方数](https://programmercarl.com/0279.完全平方数.html)
## 遍历顺序 ## 遍历顺序
### 01背包 ### 01背包
在[动态规划关于01背包问题你该了解这些](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w)中我们讲解二维dp数组01背包先遍历物品还是先遍历背包都是可以的且第二层for循环是从小到大遍历。 在[动态规划关于01背包问题你该了解这些](https://programmercarl.com/背包理论基础01背包-1.html)中我们讲解二维dp数组01背包先遍历物品还是先遍历背包都是可以的且第二层for循环是从小到大遍历。
和[动态规划关于01背包问题你该了解这些滚动数组](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA)中我们讲解一维dp数组01背包只能先遍历物品再遍历背包容量且第二层for循环是从大到小遍历。 和[动态规划关于01背包问题你该了解这些滚动数组](https://programmercarl.com/背包理论基础01背包-2.html)中我们讲解一维dp数组01背包只能先遍历物品再遍历背包容量且第二层for循环是从大到小遍历。
**一维dp数组的背包在遍历顺序上和二维dp数组实现的01背包其实是有很大差异的大家需要注意** **一维dp数组的背包在遍历顺序上和二维dp数组实现的01背包其实是有很大差异的大家需要注意**
@ -61,7 +61,7 @@
说完01背包再看看完全背包。 说完01背包再看看完全背包。
在[动态规划:关于完全背包,你该了解这些!](https://mp.weixin.qq.com/s/akwyxlJ4TLvKcw26KB9uJw)中讲解了纯完全背包的一维dp数组实现先遍历物品还是先遍历背包都是可以的且第二层for循环是从小到大遍历。 在[动态规划:关于完全背包,你该了解这些!](https://programmercarl.com/背包问题理论基础完全背包.html)中讲解了纯完全背包的一维dp数组实现先遍历物品还是先遍历背包都是可以的且第二层for循环是从小到大遍历。
但是仅仅是纯完全背包的遍历顺序是这样的题目稍有变化两个for循环的先后顺序就不一样了。 但是仅仅是纯完全背包的遍历顺序是这样的题目稍有变化两个for循环的先后顺序就不一样了。
@ -71,12 +71,12 @@
相关题目如下: 相关题目如下:
* 求组合数:[动态规划518.零钱兑换II](https://mp.weixin.qq.com/s/PlowDsI4WMBOzf3q80AksQ) * 求组合数:[动态规划518.零钱兑换II](https://programmercarl.com/0518.零钱兑换II.html)
* 求排列数:[动态规划377. 组合总和 Ⅳ](https://mp.weixin.qq.com/s/Iixw0nahJWQgbqVNk8k6gA)、[动态规划70. 爬楼梯进阶版(完全背包)](https://mp.weixin.qq.com/s/e_wacnELo-2PG76EjrUakA) * 求排列数:[动态规划377. 组合总和 Ⅳ](https://mp.weixin.qq.com/s/Iixw0nahJWQgbqVNk8k6gA)、[动态规划70. 爬楼梯进阶版(完全背包)](https://programmercarl.com/0070.爬楼梯完全背包版本.html)
如果求最小数那么两层for循环的先后顺序就无所谓了相关题目如下 如果求最小数那么两层for循环的先后顺序就无所谓了相关题目如下
* 求最小数:[动态规划322. 零钱兑换](https://mp.weixin.qq.com/s/dyk-xNilHzNtVdPPLObSeQ)、[动态规划279.完全平方数](https://mp.weixin.qq.com/s/VfJT78p7UGpDZsapKF_QJQ) * 求最小数:[动态规划322. 零钱兑换](https://programmercarl.com/0322.零钱兑换.html)、[动态规划279.完全平方数](https://programmercarl.com/0279.完全平方数.html)
**对于背包问题,其实递推公式算是容易的,难是难在遍历顺序上,如果把遍历顺序搞透,才算是真正理解了** **对于背包问题,其实递推公式算是容易的,难是难在遍历顺序上,如果把遍历顺序搞透,才算是真正理解了**
@ -88,7 +88,7 @@
**而且每一个点,我都给出了对应的力扣题目** **而且每一个点,我都给出了对应的力扣题目**
最后如果你想了解多重背包,可以看这篇[动态规划:关于多重背包,你该了解这些!](https://mp.weixin.qq.com/s/b-UUUmbvG7URWyCjQkiuuQ),力扣上还没有多重背包的题目,也不是面试考察的重点。 最后如果你想了解多重背包,可以看这篇[动态规划:关于多重背包,你该了解这些!](https://programmercarl.com/背包问题理论基础多重背包.html),力扣上还没有多重背包的题目,也不是面试考察的重点。
如果把我本篇总结出来的内容都掌握的话,可以说对背包问题理解的就很深刻了,用来对付面试中的背包问题绰绰有余! 如果把我本篇总结出来的内容都掌握的话,可以说对背包问题理解的就很深刻了,用来对付面试中的背包问题绰绰有余!

View File

@ -8,7 +8,7 @@
# 动态规划关于01背包问题你该了解这些滚动数组 # 动态规划关于01背包问题你该了解这些滚动数组
昨天[动态规划关于01背包问题你该了解这些](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w)中是用二维dp数组来讲解01背包。 昨天[动态规划关于01背包问题你该了解这些](https://programmercarl.com/背包理论基础01背包-1.html)中是用二维dp数组来讲解01背包。
今天我们就来说一说滚动数组其实在前面的题目中我们已经用到过滚动数组了就是把二维dp降为一维dp一些录友当时还表示比较困惑。 今天我们就来说一说滚动数组其实在前面的题目中我们已经用到过滚动数组了就是把二维dp降为一维dp一些录友当时还表示比较困惑。
@ -199,7 +199,7 @@ int main() {
大家可以发现其实信息量还是挺大的。 大家可以发现其实信息量还是挺大的。
如果把[动态规划关于01背包问题你该了解这些](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w)和本篇的内容都理解了后面我们在做01背包的题目就会发现非常简单了。 如果把[动态规划关于01背包问题你该了解这些](https://programmercarl.com/背包理论基础01背包-1.html)和本篇的内容都理解了后面我们在做01背包的题目就会发现非常简单了。
不用再凭感觉或者记忆去写背包,而是有自己的思考,了解其本质,代码的方方面面都在自己的掌控之中。 不用再凭感觉或者记忆去写背包,而是有自己的思考,了解其本质,代码的方方面面都在自己的掌控之中。

View File

@ -9,9 +9,9 @@
之前我们已经体统的讲解了01背包和完全背包如果没有看过的录友建议先把如下三篇文章仔细阅读一波。 之前我们已经体统的讲解了01背包和完全背包如果没有看过的录友建议先把如下三篇文章仔细阅读一波。
* [动态规划关于01背包问题你该了解这些](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w) * [动态规划关于01背包问题你该了解这些](https://programmercarl.com/背包理论基础01背包-1.html)
* [动态规划关于01背包问题你该了解这些滚动数组](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA) * [动态规划关于01背包问题你该了解这些滚动数组](https://programmercarl.com/背包理论基础01背包-2.html)
* [动态规划:关于完全背包,你该了解这些!](https://mp.weixin.qq.com/s/akwyxlJ4TLvKcw26KB9uJw) * [动态规划:关于完全背包,你该了解这些!](https://programmercarl.com/背包问题理论基础完全背包.html)
这次我们再来说一说多重背包 这次我们再来说一说多重背包

View File

@ -35,8 +35,8 @@
关于01背包我如下两篇已经进行深入分析了 关于01背包我如下两篇已经进行深入分析了
* [动态规划关于01背包问题你该了解这些](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w) * [动态规划关于01背包问题你该了解这些](https://programmercarl.com/背包理论基础01背包-1.html)
* [动态规划关于01背包问题你该了解这些滚动数组](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA) * [动态规划关于01背包问题你该了解这些滚动数组](https://programmercarl.com/背包理论基础01背包-2.html)
首先在回顾一下01背包的核心代码 首先在回顾一下01背包的核心代码
``` ```
@ -61,7 +61,7 @@ for(int i = 0; i < weight.size(); i++) { // 遍历物品
} }
``` ```
至于为什么,我在[动态规划关于01背包问题你该了解这些滚动数组](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA)中也做了讲解。 至于为什么,我在[动态规划关于01背包问题你该了解这些滚动数组](https://programmercarl.com/背包理论基础01背包-2.html)中也做了讲解。
dp状态图如下 dp状态图如下
@ -77,8 +77,8 @@ dp状态图如下
看过这两篇的话: 看过这两篇的话:
* [动态规划关于01背包问题你该了解这些](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w) * [动态规划关于01背包问题你该了解这些](https://programmercarl.com/背包理论基础01背包-1.html)
* [动态规划关于01背包问题你该了解这些滚动数组](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA) * [动态规划关于01背包问题你该了解这些滚动数组](https://programmercarl.com/背包理论基础01背包-2.html)
就知道了01背包中二维dp数组的两个for遍历的先后循序是可以颠倒了一位dp数组的两个for循环先后循序一定是先遍历物品再遍历背包容量。 就知道了01背包中二维dp数组的两个for遍历的先后循序是可以颠倒了一位dp数组的两个for循环先后循序一定是先遍历物品再遍历背包容量。