Skip to content

Commit 96347af

Browse files
committed
Update 背包问题理论基础多重背包.md
添加 python3 版本代码
1 parent 2ff875d commit 96347af

File tree

1 file changed

+48
-1
lines changed

1 file changed

+48
-1
lines changed

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

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,56 @@ int main() {
147147

148148
Java:
149149

150-
151150
Python:
152151

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+
153200

154201
Go:
155202

0 commit comments

Comments
 (0)