0-1背包问题python源代码
时间: 2024-12-21 14:27:49 浏览: 13
0-1背包问题的Python源代码可以采用动态规划的方式来编写,这里提供一个简单的例子:
```python
def knapsack(W, wt, val, n):
# 创建一个表格,其中第i行第j列的元素表示在背包容量限制为j的情况下,
# 我们是否应该选第i个物品及其最大价值
K = [[0 for w in range(W + 1)] for i in range(n + 1)]
# 遍历物品列表
for i in range(1, n + 1):
# 遍历背包容量范围
for w in range(1, W + 1):
# 如果物品i的重量小于当前容量,我们可以选择带它
if wt[i - 1] <= w:
# 选择物品时,要么不选,价值为0;要么选,取其最大价值(当前物品的价值加上之前状态下的最大价值)
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)
max_value = knapsack(W, wt, val, n)
print("最大价值为:", max_value)
```
这段代码首先初始化一个二维矩阵K用于保存状态,然后按照物品和背包容量的顺序递推求解。最后返回背包满载时所能获取的最大价值。
阅读全文