Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bdedd2d

Browse files
Update 背包问题理论基础多重背包.md
1 parent de7879f commit bdedd2d

File tree

1 file changed

+98
-26
lines changed

1 file changed

+98
-26
lines changed

‎problems/背包问题理论基础多重背包.md‎

Lines changed: 98 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -194,55 +194,127 @@ public void testMultiPack2(){
194194

195195
Python:
196196

197+
改变物品数量为01背包格式(无参版)
197198
```python
198-
def test_multi_pack1():
199-
'''版本一:改变物品数量为01背包格式'''
199+
def test_multi_pack():
200200
weight = [1, 3, 4]
201201
value = [15, 20, 30]
202202
nums = [2, 3, 2]
203-
bag_weight = 10
203+
bagWeight = 10
204+
205+
# 将数量大于1的物品展开
204206
for i in range(len(nums)):
205-
# 将物品展开数量为1
206207
while nums[i] > 1:
207208
weight.append(weight[i])
208209
value.append(value[i])
209210
nums[i] -= 1
210-
211-
dp = [0]*(bag_weight + 1)
212-
# 遍历物品
213-
for i in range(len(weight)):
214-
# 遍历背包
215-
for j in range(bag_weight, weight[i] - 1, -1):
211+
212+
dp = [0] * (bagWeight + 1)
213+
for i in range(len(weight)): # 遍历物品
214+
for j in range(bagWeight, weight[i] - 1, -1): # 遍历背包容量
216215
dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
217-
218-
print(" ".join(map(str, dp)))
216+
for j in range(bagWeight + 1):
217+
print(dp[j], end=" ")
218+
print()
219+
220+
print(dp[bagWeight])
219221

220-
def test_multi_pack2():
221-
'''版本:改变遍历个数'''
222+
223+
test_multi_pack()
224+
225+
```
226+
227+
228+
改变遍历个数(无参版)
229+
```python
230+
def test_multi_pack():
222231
weight = [1, 3, 4]
223232
value = [15, 20, 30]
224233
nums = [2, 3, 2]
225-
bag_weight = 10
234+
bagWeight = 10
235+
dp = [0] * (bagWeight + 1)
236+
237+
for i in range(len(weight)): # 遍历物品
238+
for j in range(bagWeight, weight[i] - 1, -1): # 遍历背包容量
239+
# 以上为01背包,然后加一个遍历个数
240+
for k in range(1, nums[i] + 1): # 遍历个数
241+
if j - k * weight[i] >= 0:
242+
dp[j] = max(dp[j], dp[j - k * weight[i]] + k * value[i])
243+
244+
# 打印一下dp数组
245+
for j in range(bagWeight + 1):
246+
print(dp[j], end=" ")
247+
print()
248+
249+
print(dp[bagWeight])
250+
251+
252+
test_multi_pack()
253+
254+
```
255+
256+
257+
改变物品数量为01背包格式(有参版)
258+
```python
259+
def test_multi_pack(weight, value, nums, bagWeight):
260+
# 将数量大于1的物品展开
261+
for i in range(len(nums)):
262+
while nums[i] > 1:
263+
weight.append(weight[i])
264+
value.append(value[i])
265+
nums[i] -= 1
266+
267+
dp = [0] * (bagWeight + 1)
268+
for i in range(len(weight)): # 遍历物品
269+
for j in range(bagWeight, weight[i] - 1, -1): # 遍历背包容量
270+
dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
271+
for j in range(bagWeight + 1):
272+
print(dp[j], end=" ")
273+
print()
274+
275+
print(dp[bagWeight])
226276

227-
dp = [0]*(bag_weight + 1)
228-
for i in range(len(weight)):
229-
for j in range(bag_weight, weight[i] - 1, -1):
230-
# 以上是01背包,加上遍历个数
231-
for k in range(1, nums[i] + 1):
232-
if j - k*weight[i] >= 0:
233-
dp[j] = max(dp[j], dp[j - k*weight[i]] + k*value[i])
234277

235-
print(" ".join(map(str, dp)))
236278

237279

238-
if __name__ == '__main__':
239-
test_multi_pack1()
240-
test_multi_pack2()
280+
if __name__ == "__main__":
281+
weight = [1, 3, 4]
282+
value = [15, 20, 30]
283+
nums = [2, 3, 2]
284+
bagWeight = 10
285+
test_multi_pack(weight, value, nums, bagWeight)
241286
```
242287

243288

289+
改变遍历个数(有参版)
290+
```python
291+
def test_multi_pack(weight, value, nums, bagWeight):
292+
dp = [0] * (bagWeight + 1)
293+
294+
for i in range(len(weight)): # 遍历物品
295+
for j in range(bagWeight, weight[i] - 1, -1): # 遍历背包容量
296+
# 以上为01背包,然后加一个遍历个数
297+
for k in range(1, nums[i] + 1): # 遍历个数
298+
if j - k * weight[i] >= 0:
299+
dp[j] = max(dp[j], dp[j - k * weight[i]] + k * value[i])
244300

301+
# 使用 join 函数打印 dp 数组
302+
print(' '.join(str(dp[j]) for j in range(bagWeight + 1)))
245303

304+
print(dp[bagWeight])
305+
306+
307+
308+
309+
310+
if __name__ == "__main__":
311+
weight = [1, 3, 4]
312+
value = [15, 20, 30]
313+
nums = [2, 3, 2]
314+
bagWeight = 10
315+
test_multi_pack(weight, value, nums, bagWeight)
316+
317+
```
246318
Go:
247319

248320
```go

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /