题解 | #一个背包问题#

一个背包问题

https://ac.nowcoder.com/acm/problem/15588

Python求解一个背包问题

这是一个普通的背包问题, 我们可以直接暴力求解。

N, M = map(int,input().split())
f = [] # 存放价值,重量,单价

# 价值和重量的输入
for i in range(N):
    t = []
    t = list(map(int,input().split()))
    t.append(t[0]/t[1]) # 计算每一个物品的单价
    f.append(t)

# 对所获得的列表进行单价排序
f.sort(key=lambda x:x[2], reverse = True)

max_value = 0
for i in range(len(f)):
    if M >= f[i][1]: # 如果背包空闲重量M大于第i个物品的重量
        M -= f[i][1]  # 拿第i个物品,背包空闲M减去第i个物品的重量
        max_value += f[i][0] # 加上第i个物品的价值
    else: # 空闲重量M比第i个物品的重量小,因为物品可分割,所以拿空闲重量 * 第i个物品的单价
        max_value += (M * f[i][2])
        break # 拿满了背包直接跳出循环即可

print("{:.2f}".format(max_value))
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务