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打开url并按指定块读取网页内容的方法
Apr 29 Python
好的Python培训机构应该具备哪些条件
May 23 Python
对python数据切割归并算法的实例讲解
Dec 12 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
python实现读取excel文件中所有sheet操作示例
Aug 09 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
Python 使用type来定义类的实现
Nov 19 Python
Python ATM功能实现代码实例
Mar 19 Python
如何完美的建立一个python项目
Oct 09 Python
python+flask编写一个简单的登录接口
Nov 13 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
python中slice参数过长的处理方法及实例
Dec 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调用三种数据库的方法(1)
2006/10/09 PHP
mysql+php分页类(已测)
2008/03/31 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
jquery获取元素索引值index()示例
2014/02/13 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
Python检测生僻字的实现方法
2016/10/23 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
对numpy中轴与维度的理解
2018/04/18 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
学生党员思想汇报范文
2014/01/09 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
赢在执行观后感
2015/06/16 职场文书
Python采集壁纸并实现炫轮播
2022/04/30 Python
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB