From 4b396e1f37035796e5407db69d3aa7d74c8ba21b Mon Sep 17 00:00:00 2001 From: Logen <47022821+Logenleedev@users.noreply.github.com> Date: Sat, 28 Jan 2023 14:27:57 -0600 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0322.零钱兑换.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/problems/0322.零钱兑换.md b/problems/0322.零钱兑换.md index 45974112..7505f5ec 100644 --- a/problems/0322.零钱兑换.md +++ b/problems/0322.零钱兑换.md @@ -209,19 +209,19 @@ class Solution: def coinChange(self, coins: List[int], amount: int) -> int: '''版本一''' # 初始化 - dp = [amount + 1]*(amount + 1) + dp = [float("inf")]*(amount + 1) dp[0] = 0 # 遍历物品 for coin in coins: # 遍历背包 for j in range(coin, amount + 1): dp[j] = min(dp[j], dp[j - coin] + 1) - return dp[amount] if dp[amount] < amount + 1 else -1 + return dp[amount] if dp[amount] != float("inf") else -1 def coinChange1(self, coins: List[int], amount: int) -> int: '''版本二''' # 初始化 - dp = [amount + 1]*(amount + 1) + dp = [float("inf")]*(amount + 1) dp[0] = 0 # 遍历物品 for j in range(1, amount + 1): @@ -229,7 +229,7 @@ class Solution: for coin in coins: if j >= coin: dp[j] = min(dp[j], dp[j - coin] + 1) - return dp[amount] if dp[amount] < amount + 1 else -1 + return dp[amount] if dp[amount] != float("inf") else -1 ``` From 7bf3645bde75d74b1126da1e9866647763fff3e1 Mon Sep 17 00:00:00 2001 From: Logen <47022821+Logenleedev@users.noreply.github.com> Date: Mon, 30 Jan 2023 20:02:15 -0600 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20typo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/背包理论基础01背包-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/背包理论基础01背包-2.md b/problems/背包理论基础01背包-2.md index 816719c3..3c5b45c1 100644 --- a/problems/背包理论基础01背包-2.md +++ b/problems/背包理论基础01背包-2.md @@ -139,7 +139,7 @@ dp[1] = dp[1 - weight[0]] + value[0] = 15 倒序遍历的原因是,本质上还是一个对二维数组的遍历,并且右下角的值依赖上一层左上角的值,因此需要保证左边的值仍然是上一层的,从右向左覆盖。 -(这里如果读不懂,就在回想一下dp[j]的定义,或者就把两个for循环顺序颠倒一下试试!) +(这里如果读不懂,就再回想一下dp[j]的定义,或者就把两个for循环顺序颠倒一下试试!) **所以一维dp数组的背包在遍历顺序上和二维其实是有很大差异的!**,这一点大家一定要注意。 From 3347033a2ece87d39f398265f2dbe2d66864c1f8 Mon Sep 17 00:00:00 2001 From: Logen <47022821+Logenleedev@users.noreply.github.com> Date: Wed, 1 Feb 2023 12:51:07 -0600 Subject: [PATCH 3/3] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E8=AE=B2=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0123.买卖股票的最佳时机III.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0123.买卖股票的最佳时机III.md b/problems/0123.买卖股票的最佳时机III.md index d480da83..3cd7ab26 100644 --- a/problems/0123.买卖股票的最佳时机III.md +++ b/problems/0123.买卖股票的最佳时机III.md @@ -120,7 +120,7 @@ dp[i][4] = max(dp[i - 1][4], dp[i - 1][3] + prices[i]); 大家可以看到红色框为最后两次卖出的状态。 -现在最大的时候一定是卖出的状态,而两次卖出的状态现金最大一定是最后一次卖出。 +现在最大的时候一定是卖出的状态,而两次卖出的状态现金最大一定是最后一次卖出。如果想不明白的录友也可以这么理解:如果第一次卖出已经是最大值了,那么我们可以在当天立刻买入再立刻卖出。所以dp[4][4]已经包含了dp[4][2]的情况。也就是说第二次卖出手里所剩的钱一定是最多的。 所以最终最大利润是dp[4][4]