01背包问题python代码和伪代码
时间: 2023-11-12 09:14:59 浏览: 36
01背包问题是经典的动态规划问题,以下是Python代码和伪代码:
Python代码:
```python
def knapsack(w, v, c):
n = len(w)
dp = [[0] * (c+1) for _ in range(n+1)]
for i in range(1, n+1):
for j in range(1, c+1):
if w[i-1] > j:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i-1]] + v[i-1])
return dp[n][c]
```
伪代码:
```
输入:物品的重量数组 w,物品的价值数组 v,背包容量 c
定义一个 n 行 c+1 列的二维数组 dp
初始化 dp[0][j] = 0,表示不选任何物品时的最大价值为 0
for i = 1 to n:
for j = 1 to c:
if w[i-1] > j:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i-1]] + v[i-1])
返回 dp[n][c],即选取物品后的最大价值
```
相关问题
01背包问题python代码
下面是 01 背包问题的 Python 代码实现:
```python
def knapsack(W, wt, val, n):
K = [[0 for x in range(W+1)] for x in range(n+1)]
for i in range(n+1):
for w in range(W+1):
if i==0 or w==0:
K[i][w] = 0
elif wt[i-1] <= w:
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w])
else:
K[i][w] = K[i-1][w]
return K[n][W]
val = [60, 100, 120]
wt = [10, 20, 30]
W = 50
n = len(val)
print(knapsack(W, wt, val, n))
```
输出结果为 220。
用动态规划解决01背包问题python代码
下面是用动态规划解决01背包问题的Python代码:
```python
def knapsack(W, wt, val, n):
# 创建动态规划数组
K = [[0 for x in range(W+1)] for x in range(n+1)]
# 填充动态规划数组
for i in range(n+1):
for w in range(W+1):
if i==0 or w==0:
K[i][w] = 0
elif wt[i-1] <= w:
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w])
else:
K[i][w] = K[i-1][w]
return K[n][W]
```
其中,函数 knapsack 的参数如下:
- W:背包的容量;
- wt:物品的重量列表;
- val:物品的价值列表;
- n:物品的数量。
函数返回 01 背包问题的最优解。