@@ -51,14 +51,15 @@ $dp[i][w] = max \lbrace dp[i - 1][w - k \times weight[i - 1]] + k \times value[i
51
51
52
52
``` Python
53
53
class Solution :
54
+ # 思路 1:动态规划 + 二维基本思路
54
55
def completePackMethod1 (self , weight : [int ], value : [int ], W : int ):
55
56
size = len (weight)
56
57
dp = [[0 for _ in range (W + 1 )] for _ in range (size + 1 )]
57
58
58
59
# 枚举前 i 种物品
59
60
for i in range (1 , size + 1 ):
60
61
# 枚举背包装载重量
61
- for w in range (1 , W + 1 ):
62
+ for w in range (W + 1 ):
62
63
# 枚举第 i 种物品能取个数
63
64
for k in range (w // weight[i - 1 ] + 1 ):
64
65
# dp[i][w] 取所有 dp[i - 1][w - k * weight[i - 1] + k * value[i - 1] 中最大值
@@ -142,15 +143,16 @@ $\quad dp[i][w] = \begin{cases} dp[i - 1][w] & w < weight[i - 1] \cr max \lbrac
142
143
#### 思路 2:代码
143
144
144
145
``` Python
145
- class Solution :
146
+ class Solution :
147
+ # 思路 2:动态规划 + 状态转移方程优化
146
148
def completePackMethod2 (self , weight : [int ], value : [int ], W : int ):
147
149
size = len (weight)
148
150
dp = [[0 for _ in range (W + 1 )] for _ in range (size + 1 )]
149
151
150
152
# 枚举前 i 种物品
151
153
for i in range (1 , size + 1 ):
152
154
# 枚举背包装载重量
153
- for w in range (1 , W + 1 ):
155
+ for w in range (W + 1 ):
154
156
# 第 i - 1 件物品装不下
155
157
if w < weight[i - 1 ]:
156
158
# dp[i][w] 取「前 i - 1 种物品装入载重为 w 的背包中的最大价值」
@@ -209,6 +211,7 @@ $dp[w] = \begin{cases} dp[w] & w < weight[i - 1] \cr max \lbrace dp[w], \quad d
209
211
210
212
``` Python
211
213
class Solution :
214
+ # 思路 3:动态规划 + 滚动数组优化
212
215
def completePackMethod3 (self , weight : [int ], value : [int ], W : int ):
213
216
size = len (weight)
214
217
dp = [0 for _ in range (W + 1 )]
0 commit comments