P2240 【深基12.例1】部分背包问题
时间:2023.10.1
题目地址:部分背包问题
题目分析
部分背包问题又叫分数背包,贪心的典型题型,要想在容量不变的情况下获取最大价值,那就尽可能的拿单价最大的。
代码
n, t = map(int, input().split())
li = []
for _ in range(n):
m, v = map(int, input().split())
li.append([m, v, v/m])
# 按单价由大到小排序
li.sort(key=lambda x:x[-1], reverse=True)
total = 0
for temp in li:
if temp[0] >= t:
total += t*temp[-1]
# 此时t=0
break
else:
total += temp[1]
t -= temp[0]
print('{:.2f}'.format(total))