完成贪心解求背包问题 输入格式(参考以下格式,) 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
时间: 2024-01-26 13:04:51 浏览: 58
01背包问题的贪心算法.docx
以下是贪心解求背包问题的 Python 代码实现:
```python
# 读取输入数据
n, M = map(int, input().split())
P = list(map(int, input().split()))
W = list(map(int, input().split()))
# 计算P/W比值并按比值从大到小排序
values = [P[i]/W[i] for i in range(n)]
items = sorted(zip(values, P, W), reverse=True)
# 贪心计算
X = [0] * n
max_value = 0
for v, p, w in items:
if M >= w:
X[P.index(p)] = 1
M -= w
max_value += p
else:
X[P.index(p)] = M / w
max_value += v * M
break
# 输出结果
print('X', ' '.join([str(x) for x in X]), '{:.1f}'.format(max_value))
```
输入格式和输出格式都与题目描述一致。运行结果示例如下:
```
输入样例:
3 20
25 24 15
18 15 10
输出样例:
X 1 1 0.5 31.5
```
阅读全文