利用回溯法的递归框架,实现 01 背包问题,(问题设定:背包的限定重 量为 6,物品数量为 4,四个物品的重量分别为 5,3,2,1;四个物品的价值分别为 4,4,3,1。)
时间: 2024-03-19 15:46:04 浏览: 44
用回溯法求解背包问题
5星 · 资源好评率100%
好的,以下是利用回溯法的递归框架,实现 01 背包问题的 Python 代码:
```python
def backtrack(items, max_weight):
n = len(items)
max_value = 0
current_weight = 0
current_value = 0
choose = [False] * n
def dfs(current_weight, current_value, current_item, choose):
nonlocal max_value
if current_weight > max_weight:
return
if current_item == n:
max_value = max(max_value, current_value)
return
# 选择当前物品
choose[current_item] = True
dfs(current_weight + items[current_item][0], current_value + items[current_item][1], current_item + 1, choose)
# 不选当前物品
choose[current_item] = False
dfs(current_weight, current_value, current_item + 1, choose)
dfs(current_weight, current_value, 0, choose)
return max_value
items = [(5, 4), (3, 4), (2, 3), (1, 1)]
max_weight = 6
max_value = backtrack(items, max_weight)
print(max_value)
```
输出结果为 8,即选取第 1 和第 2 个物品可以获得最大价值。
阅读全文