mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
Merge pull request #2722 from wq-win/master
修正 动态规划:01背包理论基础(滚动数组)的python版本的滚动数组
This commit is contained in:
@ -294,23 +294,18 @@ public class Main {
|
|||||||
|
|
||||||
```python
|
```python
|
||||||
n, bagweight = map(int, input().split())
|
n, bagweight = map(int, input().split())
|
||||||
|
|
||||||
weight = list(map(int, input().split()))
|
weight = list(map(int, input().split()))
|
||||||
value = 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] = 0 # 初始化dp[0] = 0,背包容量为0,价值最大为0
|
||||||
dp[0][j] = value[0]
|
|
||||||
|
|
||||||
for i in range(1, n):
|
for i in range(n): # 应该先遍历物品,如果遍历背包容量放在上一层,那么每个dp[j]就只会放入一个物品
|
||||||
for j in range(bagweight + 1):
|
for j in range(bagweight, weight[i]-1, -1): # 倒序遍历背包容量是为了保证物品i只被放入一次
|
||||||
if j < weight[i]:
|
dp[j] = max(dp[j], dp[j - weight[i]] + value[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])
|
|
||||||
|
|
||||||
print(dp[n - 1][bagweight])
|
print(dp[bagweight])
|
||||||
|
|
||||||
```
|
```
|
||||||
### Go
|
### Go
|
||||||
|
Reference in New Issue
Block a user