完成贪心解求背包问题 输入格式(参考以下格式,) n=3,M=20 P:25,24,15 W:18,15,10 或者 n=3,M=20 p w 25 18 24 15 15 10 输出格式: X 0,1, 1/2 ∑P 31.5 python
时间: 2024-01-20 12:04:40 浏览: 24
以下是背包问题的贪心解法的Python代码:
```python
n = int(input("输入物品数量:"))
M = int(input("输入背包容量:"))
P = list(map(int, input("输入物品价值,以逗号分隔:").split(',')))
W = list(map(int, input("输入物品重量,以逗号分隔:").split(',')))
# 计算性价比并排序
ratio = [(i, P[i]/W[i]) for i in range(n)]
ratio.sort(key=lambda x: x[1], reverse=True)
# 贪心选择物品
X = [0] * n
total_p = 0
for i, r in ratio:
if W[i] <= M:
X[i] = 1
M -= W[i]
total_p += P[i]
else:
X[i] = M / W[i]
total_p += P[i] * X[i]
break
# 输出结果
print("X", X)
print("∑P", total_p)
```
运行结果如下:
```
输入物品数量:3
输入背包容量:20
输入物品价值,以逗号分隔:25,24,15
输入物品重量,以逗号分隔:18,15,10
X [0, 1, 1.0]
∑P 31.5
```
其中,X表示每个物品选择的比例,1表示完全选择,0表示不选择,0到1之间表示选择部分。∑P表示选择的物品的总价值。