From 581dbd64f020e50c6f508131c588ab82f8abd9d1 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Tue, 21 Dec 2021 09:28:32 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E8=83=8C=E5=8C=85=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E7=90=86=E8=AE=BA=E5=9F=BA=E7=A1=80=E5=AE=8C=E5=85=A8=E8=83=8C?= =?UTF-8?q?=E5=8C=85=EF=BC=9A=E4=BF=AE=E6=94=B9Java=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F=E5=8C=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../背包问题理论基础完全背包.md | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/problems/背包问题理论基础完全背包.md b/problems/背包问题理论基础完全背包.md index 27d820bc..3cc8557c 100644 --- a/problems/背包问题理论基础完全背包.md +++ b/problems/背包问题理论基础完全背包.md @@ -177,41 +177,41 @@ int main() { Java: ```java - //先遍历物品,再遍历背包 - private static void testCompletePack(){ - int[] weight = {1, 3, 4}; - int[] value = {15, 20, 30}; - int bagWeight = 4; - int[] dp = new int[bagWeight + 1]; - for (int i = 0; i < weight.length; i++){ - for (int j = 1; j <= bagWeight; j++){ - if (j - weight[i] >= 0){ - dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]); - } +//先遍历物品,再遍历背包 +private static void testCompletePack(){ + int[] weight = {1, 3, 4}; + int[] value = {15, 20, 30}; + int bagWeight = 4; + int[] dp = new int[bagWeight + 1]; + for (int i = 0; i < weight.length; i++){ + for (int j = 1; j <= bagWeight; j++){ + if (j - weight[i] >= 0){ + dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]); } } - for (int maxValue : dp){ - System.out.println(maxValue + " "); - } } + for (int maxValue : dp){ + System.out.println(maxValue + " "); + } +} - //先遍历背包,再遍历物品 - private static void testCompletePackAnotherWay(){ - int[] weight = {1, 3, 4}; - int[] value = {15, 20, 30}; - int bagWeight = 4; - int[] dp = new int[bagWeight + 1]; - for (int i = 1; i <= bagWeight; i++){ - for (int j = 0; j < weight.length; j++){ - if (i - weight[j] >= 0){ - dp[i] = Math.max(dp[i], dp[i - weight[j]] + value[j]); - } +//先遍历背包,再遍历物品 +private static void testCompletePackAnotherWay(){ + int[] weight = {1, 3, 4}; + int[] value = {15, 20, 30}; + int bagWeight = 4; + int[] dp = new int[bagWeight + 1]; + for (int i = 1; i <= bagWeight; i++){ + for (int j = 0; j < weight.length; j++){ + if (i - weight[j] >= 0){ + dp[i] = Math.max(dp[i], dp[i - weight[j]] + value[j]); } } - for (int maxValue : dp){ - System.out.println(maxValue + " "); - } } + for (int maxValue : dp){ + System.out.println(maxValue + " "); + } +} ``` From 91db8652e7f38dc968291d639740bfc6f8d58164 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Tue, 21 Dec 2021 10:55:00 +0800 Subject: [PATCH 2/7] =?UTF-8?q?0322.=E9=9B=B6=E9=92=B1=E5=85=91=E6=8D=A2?= =?UTF-8?q?=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0322.零钱兑换.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/problems/0322.零钱兑换.md b/problems/0322.零钱兑换.md index 637e68eb..8f3438af 100644 --- a/problems/0322.零钱兑换.md +++ b/problems/0322.零钱兑换.md @@ -81,7 +81,7 @@ dp[0] = 0; 4. 确定遍历顺序 -本题求钱币最小个数,**那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。**。 +本题求钱币最小个数,**那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数**。 所以本题并不强调集合是组合还是排列。 @@ -170,7 +170,7 @@ public: 这也是我为什么要先讲518.零钱兑换II 然后再讲本题即:322.零钱兑换,这是Carl的良苦用心那。 -相信大家看完之后,对背包问题中的遍历顺序又了更深的理解了。 +相信大家看完之后,对背包问题中的遍历顺序有更深的理解了。 From 0b5e79d826b9eca2f4ef53e9ddd9dc540e288ca9 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Tue, 21 Dec 2021 11:30:52 +0800 Subject: [PATCH 3/7] =?UTF-8?q?279.=E5=AE=8C=E5=85=A8=E5=B9=B3=E6=96=B9?= =?UTF-8?q?=E6=95=B0=EF=BC=9A=E4=BF=AE=E6=94=B9=E5=8A=A8=E8=A7=84=E4=BA=94?= =?UTF-8?q?=E9=83=A8=E6=9B=B2=E4=B8=AD=20i=E5=92=8Cj=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BD=BF=E7=94=A8=20=E5=92=8C=20=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=96=87=E5=AD=97=E8=A1=A8=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0279.完全平方数.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/problems/0279.完全平方数.md b/problems/0279.完全平方数.md index 86c3170e..7bc0c2f7 100644 --- a/problems/0279.完全平方数.md +++ b/problems/0279.完全平方数.md @@ -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 dp(n + 1, INT_MAX); From fbddab5769b40824d9dca8c35c97f7f66707939d Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Tue, 21 Dec 2021 11:39:10 +0800 Subject: [PATCH 4/7] =?UTF-8?q?20210204=E5=8A=A8=E8=A7=84=E5=91=A8?= =?UTF-8?q?=E6=9C=AB=E6=80=BB=E7=BB=93=EF=BC=9A=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/周总结/20210204动规周末总结.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/周总结/20210204动规周末总结.md b/problems/周总结/20210204动规周末总结.md index 31009298..9a64c152 100644 --- a/problems/周总结/20210204动规周末总结.md +++ b/problems/周总结/20210204动规周末总结.md @@ -85,7 +85,7 @@ public: 关键看遍历顺序。 -本题求钱币最小个数,**那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。**。 +本题求钱币最小个数,**那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数**。 所以本题并不强调集合是组合还是排列。 From f460b46a261fd5a75a8bad175d5f41d30b632e87 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Wed, 22 Dec 2021 10:02:54 +0800 Subject: [PATCH 5/7] =?UTF-8?q?0139.=E5=8D=95=E8=AF=8D=E6=8B=86=E5=88=86?= =?UTF-8?q?=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0139.单词拆分.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0139.单词拆分.md b/problems/0139.单词拆分.md index db80d4d4..e24ffc1a 100644 --- a/problems/0139.单词拆分.md +++ b/problems/0139.单词拆分.md @@ -220,7 +220,7 @@ public: 但因为分割子串的特殊性,遍历背包放在外循环,将遍历物品放在内循环更方便一些。 -本题其实递推公式都不是重点,遍历顺序才是重点,如果我直接把代码贴出来,估计同学们也会想两个for循环的顺序理所当然就是这样,甚至都不会想为什么遍历背包的for循环为什么在外层。 +本题其实递推公式都不是重点,遍历顺序才是重点,如果我直接把代码贴出来,估计同学们也会想两个for循环的顺序理所当然就是这样,甚至都不会想为什么遍历背包的for循环在外层。 不分析透彻不是Carl的风格啊,哈哈 From f4b5c9198d5fe5ab8e8d41c334a406ece7bca0df Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Wed, 22 Dec 2021 10:10:45 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E8=83=8C=E5=8C=85=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E7=90=86=E8=AE=BA=E5=9F=BA=E7=A1=80=E5=A4=9A=E9=87=8D=E8=83=8C?= =?UTF-8?q?=E5=8C=85=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/背包问题理论基础多重背包.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/背包问题理论基础多重背包.md b/problems/背包问题理论基础多重背包.md index 55f7cf96..82418188 100644 --- a/problems/背包问题理论基础多重背包.md +++ b/problems/背包问题理论基础多重背包.md @@ -7,7 +7,7 @@ # 动态规划:关于多重背包,你该了解这些! -之前我们已经体统的讲解了01背包和完全背包,如果没有看过的录友,建议先把如下三篇文章仔细阅读一波。 +之前我们已经系统的讲解了01背包和完全背包,如果没有看过的录友,建议先把如下三篇文章仔细阅读一波。 * [动态规划:关于01背包问题,你该了解这些!](https://programmercarl.com/背包理论基础01背包-1.html) * [动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://programmercarl.com/背包理论基础01背包-2.html) From 1a08a66586a5f3f5f2362e8b4e4e05fc1204140f Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Thu, 23 Dec 2021 10:45:41 +0800 Subject: [PATCH 7/7] =?UTF-8?q?20210225=E5=8A=A8=E8=A7=84=E5=91=A8?= =?UTF-8?q?=E6=9C=AB=E6=80=BB=E7=BB=93=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/周总结/20210225动规周末总结.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/problems/周总结/20210225动规周末总结.md b/problems/周总结/20210225动规周末总结.md index 4ea92266..0bf9dbdb 100644 --- a/problems/周总结/20210225动规周末总结.md +++ b/problems/周总结/20210225动规周末总结.md @@ -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& prices) {