279.完全平方数:修改动规五部曲中 i和j的错误使用 和 部分文字表述

This commit is contained in:
qyg
2021-12-21 11:30:52 +08:00
parent 91db8652e7
commit 0b5e79d826

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);