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 搭建Web站点之Web服务器网关接口
Nov 06 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
Python Pandas数据中对时间的操作
Jul 30 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
Python @property及getter setter原理详解
Mar 31 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
django序列化时使用外键的真实值操作
Jul 15 Python
vscode+PyQt5安装详解步骤
Aug 12 Python
Python机器学习之逻辑回归
May 11 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
建立动态的WML站点(三)
2006/10/09 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
javascript实现拖放效果
2015/12/16 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
react build 后打包发布总结
2018/08/24 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
Python随机生成带特殊字符的密码
2016/03/02 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
python面试题小结附答案实例代码
2019/04/11 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
浅析python函数式编程
2020/09/26 Python
办公室文书岗位职责
2013/12/16 职场文书
安全负责人任命书
2014/06/06 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
工作证明英文模板
2014/10/21 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
创业计划书之酒吧
2019/12/02 职场文书
Python实现简单的猜单词
2021/06/15 Python
详解Spring事件发布与监听机制
2021/06/30 Java/Android
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server