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基于windows平台锁定键盘输入的方法
Mar 05 Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
python中import学习备忘笔记
Jan 24 Python
python获取指定时间差的时间实例详解
Apr 11 Python
python+opencv轮廓检测代码解析
Jan 05 Python
Python 读写文件的操作代码
Sep 20 Python
python_opencv用线段画封闭矩形的实例
Dec 05 Python
pybind11在Windows下的使用教程
Jul 04 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
安装不同版本的tensorflow与models方法实现
Feb 20 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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实现水仙花数示例分享
2014/04/03 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
List the UTC Time on a Computer
2007/06/11 Javascript
Javascript typeof 用法
2008/12/28 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
js密码强度检测
2016/01/07 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
js中new一个对象的过程
2017/02/20 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
Python如何存储数据到json文件
2020/03/09 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
初中体育教学反思
2014/01/14 职场文书
广告词串烧
2014/03/19 职场文书
保护环境标语
2014/06/09 职场文书
自主招生自荐信范文
2015/03/04 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
浅谈Java父子类加载顺序
2021/08/04 Java/Android