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 相关文章推荐
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
Django中的Signal代码详解
Feb 05 Python
pyshp创建shp点文件的方法
Dec 31 Python
Python实现简单石头剪刀布游戏
Jan 20 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
python中time库的实例使用方法
Oct 31 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
python属于软件吗
Jun 18 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 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
提问的智慧
2006/10/09 PHP
PHP 各种排序算法实现代码
2009/08/20 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
2015/03/04 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
vue组件的写法汇总
2018/04/12 Javascript
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
大专生自我评价
2014/01/28 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
孩子教育的心得体会
2014/09/01 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
2015年资料员工作总结
2015/04/25 职场文书