Python基于动态规划算法解决01背包问题实例


Posted in Python onDecember 06, 2017

本文实例讲述了Python基于动态规划算法解决01背包问题。分享给大家供大家参考,具体如下:

在01背包问题中,在选择是否要把一个物品加到背包中,必须把该物品加进去的子问题的解与不取该物品的子问题的解进行比较,这种方式形成的问题导致了许多重叠子问题,使用动态规划来解决。n=5是物品的数量,c=10是书包能承受的重量,w=[2,2,6,5,4]是每个物品的重量,v=[6,3,5,4,6]是每个物品的价值,先把递归的定义写出来:

Python基于动态规划算法解决01背包问题实例

然后自底向上实现,代码如下:

def bag(n,c,w,v):
  res=[[-1 for j in range(c+1)] for i in range(n+1)]
  for j in range(c+1):
    res[0][j]=0
  for i in range(1,n+1):
    for j in range(1,c+1):
      res[i][j]=res[i-1][j]
      if j>=w[i-1] and res[i][j]<res[i-1][j-w[i-1]]+v[i-1]:
        res[i][j]=res[i-1][j-w[i-1]]+v[i-1]
  return res
def show(n,c,w,res):
  print('最大价值为:',res[n][c])
  x=[False for i in range(n)]
  j=c
  for i in range(1,n+1):
    if res[i][j]>res[i-1][j]:
      x[i-1]=True
      j-=w[i-1]
  print('选择的物品为:')
  for i in range(n):
    if x[i]:
      print('第',i,'个,',end='')
  print('')
if __name__=='__main__':
  n=5
  c=10
  w=[2,2,6,5,4]
  v=[6,3,5,4,6]
  res=bag(n,c,w,v)
  show(n,c,w,res)

输出结果如下:

Python基于动态规划算法解决01背包问题实例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python中操作文件之read()方法的使用教程
May 24 Python
Python运算符重载用法实例
May 28 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
python切片及sys.argv[]用法详解
May 25 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
提升Python程序性能的7个习惯
Apr 14 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
python怎么调用自己的函数
Jul 01 Python
解决pytorch 数据类型报错的问题
Mar 03 Python
python高温预警数据获取实例
Jul 23 Python
Python机器学习之决策树算法实例详解
Dec 06 #Python
快速入门python学习笔记
Dec 06 #Python
Python中django学习心得
Dec 06 #Python
Python标准库inspect的具体使用方法
Dec 06 #Python
读取本地json文件,解析json(实例讲解)
Dec 06 #Python
Python语言描述最大连续子序列和
Dec 05 #Python
python matplotlib坐标轴设置的方法
Dec 05 #Python
You might like
php图像处理类实例
2015/07/28 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
python list元素为tuple时的排序方法
2018/04/18 Python
Python闭包函数定义与用法分析
2018/07/20 Python
Python文件路径名的操作方法
2019/10/30 Python
python装饰器的特性原理详解
2019/12/25 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
荷兰本土平价百货:HEMA
2017/10/23 全球购物
大学生自我鉴定
2013/12/16 职场文书
网络书店创业计划书
2014/02/07 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
介绍信模板
2015/01/31 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
如何在Python项目中引入日志
2021/05/31 Python
关于Nginx中虚拟主机的一些冷门知识小结
2022/03/03 Servers
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android