假设有一个背包能承受最大重量为M,有n个物品,每个物品有自己的重量和价值。首先按照价值与重量的比值对物品进行排序,然后按照这个比值从大到小依次选择物品放入背包,直到背包不能再装下更多物品为止。 用贪心算法PYTHON
时间: 2024-10-10 20:16:50 浏览: 29
这种问题通常被称为0-1背包问题,可以用贪婪算法解决。贪婪算法在此场景中会选择当前价值与重量比最高的物品优先放入背包,直到达到背包的最大容量。以下是使用Python实现的一个简单版本:
```python
def knapsack_greedy(M, items):
# 对物品按照价值密度(价值除以重量)降序排列
items.sort(key=lambda x: x[1] / x[0], reverse=True)
total_value = 0 # 背包总价值
current_weight = 0 # 当前背包重量
for item in items:
if current_weight + item[0] <= M: # 如果加入物品不会超过背包容量
total_value += item[1] # 添加价值
current_weight += item[0] # 加上物品重量
else: # 如果会超重,则只取刚好填满空间的部分
remaining_weight = M - current_weight
total_value += (remaining_weight / item[0]) * item[1]
break
return total_value
# 使用示例
M = 50
items = [(10, 60), (20, 100), (30, 120)] # 物品列表:(重量, 价值)
max_value = knapsack_greedy(M, items)
print(f"背包可以携带的最大价值为: {max_value}")
阅读全文