01背包问题python
时间: 2023-10-21 11:33:29 浏览: 45
# 01背包问题的动态规划算法实现
# 物品数量
n = 5
# 背包容量
m = 10
# 物品重量和价值
w = [0, 2, 2, 6, 5, 4]
v = [0, 6, 3, 5, 4, 6]
# 初始化价值矩阵
dp = [[0 for j in range(m + 1)] for i in range(n + 1)]
# 动态规划
for i in range(1, n + 1):
for j in range(1, m + 1):
if j < w[i]:
dp[i][j] = dp[i - 1][j]
else:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i])
# 输出结果
print(dp[n][m])
相关问题
01背包问题Python
好的,下面是一个简单的 01 背包问题的 Python 代码示例:
```python
def knapsack(W, wt, val, n):
"""
:param W: 背包容量
:param wt: 物品重量列表
:param val: 物品价值列表
:param n: 物品数量
:return: 最大价值
"""
# 初始化 dp 数组
dp = [[0 for x in range(W + 1)] for x in range(n + 1)]
# 逐个考虑物品
for i in range(1, n + 1):
for w in range(1, W + 1):
# 如果当前物品重量大于背包容量,则无法放入该物品
if wt[i - 1] > w:
dp[i][w] = dp[i - 1][w]
# 否则,比较放入和不放入该物品的价值,取较大值
else:
dp[i][w] = max(val[i - 1] + dp[i - 1][w - wt[i - 1]], dp[i - 1][w])
return dp[n][W]
```
使用方法如下:
```python
W = 50
wt = [10, 20, 30]
val = [60, 100, 120]
n = len(val)
print(knapsack(W, wt, val, n)) # 输出 220
```
以上就是一个简单的 01 背包问题的 Python 实现,希望对你有所帮助。
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。
阅读全文