修正 动态规划:01背包理论基础(滚动数组)的python版本的滚动数组

This commit is contained in:
wangq635
2024-09-07 19:50:44 +08:00
parent d35af507c9
commit 56306fc00b

View File

@ -294,23 +294,18 @@ public class Main {
```python
n, bagweight = map(int, input().split())
weight = list(map(int, input().split()))
value = list(map(int, input().split()))
dp = [[0] * (bagweight + 1) for _ in range(n)]
dp = [0] * (bagweight + 1) # 创建一个动态规划数组dp初始值为0
for j in range(weight[0], bagweight + 1):
dp[0][j] = value[0]
dp[0] = 0 # 初始化dp[0] = 0,背包容量为0价值最大为0
for i in range(1, n):
for j in range(bagweight + 1):
if j < weight[i]:
dp[i][j] = dp[i - 1][j]
else:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])
for i in range(n): # 应该先遍历物品如果遍历背包容量放在上一层那么每个dp[j]就只会放入一个物品
for j in range(bagweight, weight[i]-1, -1): # 倒序遍历背包容量是为了保证物品i只被放入一次
dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
print(dp[n - 1][bagweight])
print(dp[bagweight])
```
### Go