File tree Expand file tree Collapse file tree 1 file changed +48
-1
lines changed Expand file tree Collapse file tree 1 file changed +48
-1
lines changed Original file line number Diff line number Diff line change @@ -147,9 +147,56 @@ int main() {
147
147
148
148
Java:
149
149
150
-
151
150
Python:
152
151
152
+ ``` python
153
+ def test_multi_pack1 ():
154
+ ''' 版本一:改变物品数量为01背包格式'''
155
+ weight = [1 , 3 , 4 ]
156
+ value = [15 , 20 , 30 ]
157
+ nums = [2 , 3 , 2 ]
158
+ bag_weight = 10
159
+ for i in range (len (nums)):
160
+ # 将物品展开数量为1
161
+ while nums[i] > 1 :
162
+ weight.append(weight[i])
163
+ value.append(value[i])
164
+ nums[i] -= 1
165
+
166
+ dp = [0 ]* (bag_weight + 1 )
167
+ # 遍历物品
168
+ for i in range (len (weight)):
169
+ # 遍历背包
170
+ for j in range (bag_weight, weight[i] - 1 , - 1 ):
171
+ dp[j] = max (dp[j], dp[j - weight[i]] + value[i])
172
+
173
+ print (" " .join(map (str , dp)))
174
+
175
+ def test_multi_pack2 ():
176
+ ''' 版本:改变遍历个数'''
177
+ weight = [1 , 3 , 4 ]
178
+ value = [15 , 20 , 30 ]
179
+ nums = [2 , 3 , 2 ]
180
+ bag_weight = 10
181
+
182
+ dp = [0 ]* (bag_weight + 1 )
183
+ for i in range (len (weight)):
184
+ for j in range (bag_weight, weight[i] - 1 , - 1 ):
185
+ # 以上是01背包,加上遍历个数
186
+ for k in range (1 , nums[i] + 1 ):
187
+ if j - k* weight[i] >= 0 :
188
+ dp[j] = max (dp[j], dp[j - k* weight[i]] + k* value[i])
189
+
190
+ print (" " .join(map (str , dp)))
191
+
192
+
193
+ if __name__ == ' __main__' :
194
+ test_multi_pack1()
195
+ test_multi_pack2()
196
+ ```
197
+
198
+
199
+
153
200
154
201
Go:
155
202
You can’t perform that action at this time.
0 commit comments