背包问题
背包问题
一个小偷在某个商店发现有n个商品,第i个商品价值vi元,重w;千克。他希望拿走的价值尽量高,但他的背包最多只能容纳W千克的东西。他应该拿走哪些商品?
问题思路:每次拿性价比最高的东西,即v/w价值最大的东西,拿满之后拿第二价值高的东西,以此类推
分数背包:对于一个商品,小偷可以拿走其中任意一部分。
# 分数背包问题 goods = [(60, 10),(100, 20),(120, 30)] # 每个商品元组表示(价格,重量) goods.sort(key=lambda x: x[0]/x[1], reverse=True) # 将商品按照性价比排序 def fractional_backpack(goods, w): # w为背包容量 m = [0 for _ in range(len(goods))] total_val = 0 # 总价值 for i, (prize, weight) in enumerate(goods): if w >= weight: # 背包的容量大于商品的重量 m[i] = 1 total_val += prize # 计算价值 w -= weight # 更新剩余容量 else: # 如果不是整个 m[i] = w / weight total_val += m[i] * prize w = 0 break return m, total_val print(fractional_backpack(goods, 50))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」