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中自定义函数的教程
Apr 27 Python
Python中的os.path路径模块中的操作方法总结
Jul 07 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
Jun 11 Python
python库lxml在linux和WIN系统下的安装
Jun 24 Python
用python写测试数据文件过程解析
Sep 25 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
python图像处理 PIL Image操作实例
Apr 09 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中http与https跨域共享session的解决方法
2014/12/20 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
python人民币小写转大写辅助工具
2018/06/20 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
Python如何获取文件路径/目录
2020/09/22 Python
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
国外的一些J2EE面试题一
2012/10/13 面试题
本科毕业生的求职信范文
2013/11/20 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
保健品市场营销方案
2014/03/31 职场文书
党日活动总结
2014/05/07 职场文书
邓小平理论心得体会
2014/09/09 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
学生会部长竞选稿
2015/11/19 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL