用python完成0-1背包问题的编写
时间: 2023-10-22 15:19:41 浏览: 101
使用遗传算法 在Python中解决 0-1 背包问题的简单方法_python_代码_下载
5星 · 资源好评率100%
好的,以下是用Python实现0-1背包问题的代码:
```python
def knapsack(capacity, weights, values):
"""
:param capacity: 背包容量
:param weights: 物品重量列表
:param values: 物品价值列表
:return: 最大价值,所选物品列表
"""
n = len(weights)
# 初始化二维数组
dp = [[0 for _ in range(capacity + 1)] for _ in range(n + 1)]
# 动态规划求解
for i in range(1, n + 1):
for j in range(1, capacity + 1):
if j < weights[i - 1]:
dp[i][j] = dp[i - 1][j]
else:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1])
# 回溯得到所选物品列表
selected_items = []
j = capacity
for i in range(n, 0, -1):
if dp[i][j] > dp[i - 1][j]:
selected_items.append(i - 1)
j -= weights[i - 1]
if j == 0:
break
selected_items.reverse()
return dp[n][capacity], selected_items
```
该函数接受三个参数:`capacity`表示背包容量,`weights`表示物品重量列表,`values`表示物品价值列表。函数返回一个元组,第一个元素是最大价值,第二个元素是所选物品列表。
例如,假设有以下数据:
```python
capacity = 50
weights = [10, 20, 30]
values = [60, 100, 120]
```
则调用函数:`knapsack(capacity, weights, values)`会返回如下结果:
```python
(220, [0, 2])
```
表示最大价值为220,所选物品是第0个和第2个。
阅读全文