Merge pull request #959 from gaoyangu/master

修改 279.完全平方中 i 和 j 的错误使用 和 动态规划背包问题系列中的部分笔误
This commit is contained in:
程序员Carl
2021-12-28 16:23:57 +08:00
committed by GitHub
7 changed files with 42 additions and 42 deletions

View File

@ -220,7 +220,7 @@ public:
但因为分割子串的特殊性遍历背包放在外循环将遍历物品放在内循环更方便一些
本题其实递推公式都不是重点遍历顺序才是重点如果我直接把代码贴出来估计同学们也会想两个for循环的顺序理所当然就是这样甚至都不会想为什么遍历背包的for循环为什么在外层
本题其实递推公式都不是重点遍历顺序才是重点如果我直接把代码贴出来估计同学们也会想两个for循环的顺序理所当然就是这样甚至都不会想为什么遍历背包的for循环在外层
不分析透彻不是Carl的风格啊哈哈

View File

@ -40,7 +40,7 @@
1. 确定dp数组dp table以及下标的含义
**dp[i]:和为i的完全平方数的最少数量为dp[i]**
**dp[j]:和为j的完全平方数的最少数量为dp[j]**
2. 确定递推公式
@ -58,7 +58,7 @@ dp[0]表示 和为0的完全平方数的最小数量那么dp[0]一定是0。
非0下标的dp[j]应该是多少呢?
从递归公式dp[j] = min(dp[j - i * i] + 1, dp[j]);中可以看出每次dp[j]都要选最小的,**所以非0下标的dp[i]一定要初始为最大值这样dp[j]在递推的时候才不会被初始值覆盖**。
从递归公式dp[j] = min(dp[j - i * i] + 1, dp[j]);中可以看出每次dp[j]都要选最小的,**所以非0下标的dp[j]一定要初始为最大值这样dp[j]在递推的时候才不会被初始值覆盖**。
4. 确定遍历顺序
@ -70,9 +70,9 @@ dp[0]表示 和为0的完全平方数的最小数量那么dp[0]一定是0。
在[动态规划322. 零钱兑换](https://programmercarl.com/0322.零钱兑换.html)中我们就深入探讨了这个问题,本题也是一样的,是求最小数!
**所以本题外层for遍历背包层for遍历物品还是外层for遍历物品内层for遍历背包都是可以的**
**所以本题外层for遍历背包层for遍历物品还是外层for遍历物品内层for遍历背包都是可以的**
我这里先给出外层遍历背包,层遍历物品的代码:
我这里先给出外层遍历背包,层遍历物品的代码:
```CPP
vector<int> dp(n + 1, INT_MAX);

View File

@ -81,7 +81,7 @@ dp[0] = 0;
4. 确定遍历顺序
本题求钱币最小个数,**那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数**。
本题求钱币最小个数,**那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数**。
所以本题并不强调集合是组合还是排列。
@ -170,7 +170,7 @@ public:
这也是我为什么要先讲518.零钱兑换II 然后再讲本题即322.零钱兑换这是Carl的良苦用心那。
相信大家看完之后,对背包问题中的遍历顺序又了更深的理解了。
相信大家看完之后,对背包问题中的遍历顺序更深的理解了。

View File

@ -85,7 +85,7 @@ public:
关键看遍历顺序。
本题求钱币最小个数,**那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数**。
本题求钱币最小个数,**那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数**。
所以本题并不强调集合是组合还是排列。

View File

@ -3,7 +3,7 @@
## 周一
[动态规划:开始打家劫舍!](https://programmercarl.com/0198.打家劫舍.html)中就是给一个数组相邻之间不能连着偷,如偷才能得到最大金钱。
[动态规划:开始打家劫舍!](https://programmercarl.com/0198.打家劫舍.html)中就是给一个数组相邻之间不能连着偷,如偷才能得到最大金钱。
1. 确定dp数组含义
@ -65,7 +65,7 @@ dp[1] = max(nums[0], nums[1]);
## 周三
[动态规划:还要打家劫舍!](https://programmercarl.com/0337.打家劫舍III.html)这次是在一二叉树上打家劫舍了,条件还是一样的,相临的不能偷。
[动态规划:还要打家劫舍!](https://programmercarl.com/0337.打家劫舍III.html)这次是在一二叉树上打家劫舍了,条件还是一样的,相临的不能偷。
这道题目是树形DP的入门题目其实树形DP其实就是在树上进行递推公式的推导没有什么神秘的。
@ -191,12 +191,12 @@ return {val2, val1};
## 周四
[动态规划:买卖股票的最佳时机](https://programmercarl.com/0121.买卖股票的最佳时机.html) 一段时间,只能买一次,问最大收益。
[动态规划:买卖股票的最佳时机](https://programmercarl.com/0121.买卖股票的最佳时机.html) 一段时间,只能买一次,问最大收益。
这里我给出了三解法:
这里我给出了三解法:
暴力解法代码:
```
```CPP
class Solution {
public:
int maxProfit(vector<int>& prices) {

View File

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