题解 | #一个背包问题#

一个背包问题

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))
全部评论

相关推荐

03-01 19:30
已编辑
南京大学 Java
点赞 评论 收藏
分享
老板加个卤鸡蛋:HR看了以为来卧底来了
点赞 评论 收藏
分享
求问!考研下岸,打算参加春招,我这个bg能进啥厂,或者需要搞点深度项目再投吗
Java抽象带篮子_...:直接海投,可以看看我的考研失利速成冲春招贴,里面详细写了简历怎么写,学哪些项目可以速成
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务