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抛出异常、自定义异常, 传递异常
Jun 20 Python
Python中的__slots__示例详解
Jul 06 Python
取numpy数组的某几行某几列方法
Apr 03 Python
python numpy格式化打印的实例
May 14 Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 Python
django 将model转换为字典的方法示例
Oct 16 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python合并同一个文件夹下所有PDF文件的方法
Mar 11 Python
详解用Python实现自动化监控远程服务器
May 18 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
Python容器使用的5个技巧和2个误区总结
Sep 26 Python
使用Tensorboard工具查看Loss损失率
Feb 15 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警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
python利用datetime模块计算时间差
2015/08/04 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
TensorFlow实现模型评估
2018/09/07 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
python远程连接MySQL数据库
2019/04/19 Python
简单了解python的break、continue、pass
2019/07/08 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
教师自我鉴定
2013/12/13 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
刑事上诉状范文
2015/05/22 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python