当前位置: 首页 > news >正文

动态规划--背包问题

动态规划

  • 背包问题
    • 算法思路
    • 代码实现

背包问题

假设你要去野营。你有一个容量为6磅的背包,需要决定该携带下面的哪些东西。其中每样东西都有相应的价值,价值越大意味着越重要:
 水(重3磅,价值10)
 书(重1磅,价值3)
 食物(重2磅,价值9)
 夹克(重2磅,价值5)
 相机(重1磅,价值6)
请问携带哪些东西时价值最高?

算法思路

参考: 《算法图解》p142
Value = Max( v1, v2)
Value – 最高价值
v1 = 当前物品的价值 + 剩余空间的价值
v2 = 同样空间排除当前物品的价值


比如一共5种物品, 按顺序当前是“相机”,
Value[5,6] :5种物品,空间为6磅。
v1 = 6 + Value[4,5]
相机的价值为 6
剩余空间为 6磅 - 1 磅 = 5 磅

v2 = Value[4,6]
在空间为6磅的情况下, 不选相机的最大价值。


代码实现

from copy import deepcopydef dynamic(gdict:dict, w:int):if len(gdict) == 1:k,its = gdict.popitem()n,v = its.popitem()if w >= n:return k,vreturn "",0else:k,its = gdict.popitem()n,v = its.popitem()newitem = deepcopy(gdict)if w>=n:name, s = dynamic(gdict, w-n)value = v +sres = "%s,%s"%(k,name)else:name,s = dynamic(gdict, w)value = sres = "%s"%namenewname,news = dynamic(newitem, w)if news > value:return newname, newsreturn res,valuegoods = dict()
goods["water"] = {3:10}
goods["book"] = {1:3}
goods["food"] = {2:9}
goods["jack"] = {2:5}
goods["camera"] = {1:6}
bags = 6print(dynamic(goods, bags))
http://www.lryc.cn/news/25720.html

相关文章:

  • 从0开始学python -45
  • 如何用BurpSuite抓取手机数据包
  • Linux性能监控工具iostat解析
  • 3D可视化大屏制作真的那么难?没有好用的软件解决吗?
  • C语言|文件读写,代码运行后留下“记忆”
  • 【2023unity游戏制作-mango的冒险】-6.关卡设计
  • JavaScript高级 浏览器WebStorage
  • $ 3 :类型强制转换场景、printf函数
  • 视频会议系统异常中断故障分析案例
  • 什么是文件传输中台?
  • 设计模式-代理模式(Java)
  • 如何处理负面评论?利用负面评论发挥优势
  • 一个JAVA程序员必备的技能有哪些?知道这些帮你快速升职加薪
  • DHTMLX Suite 8.0 重大发布,新增更多新主题、热图图表、辅助功能支持功能
  • [华为OD机试 ] Linux发行版的数量(C++ Java JS Python)
  • HydroD 实用教程(五)Morsion Model
  • 成功解决xshell7会话窗口只能显示一个的问题
  • Spring security 个人理解
  • 线性表 顺序表数组
  • 从WebRtc学习RTP协议
  • centos7 配置samba
  • 前端转golang从小白到实战自学笔记(2023/3/1)
  • 10个必须知道的JavaScript技巧,让你成为更好的程序员
  • 蓝桥杯真题(JAVA)--分巧克力
  • 机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价
  • ChatGPT引爆AIGC,垂类龙头迎来“创新春天”
  • 科技制造商必须对安全、设计选择承担更多责任
  • HTML认知
  • 全流程基于最新导则下的生态环境影响评价技术方法及图件制作与案例实践
  • 【Spring】Spring缓存注解@Cacheable、@CacheEvict、@CachePut使