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批量生成本地ip地址的方法
Mar 23 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
深入理解Python对Json的解析
Feb 14 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
基于pandas数据样本行列选取的方法
Apr 20 Python
python 梯度法求解函数极值的实例
Jul 10 Python
python KNN算法实现鸢尾花数据集分类
Oct 24 Python
python FTP批量下载/删除/上传实例
Dec 22 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
浅谈python数据类型及其操作
May 25 Python
python分分钟绘制精美地图海报
Feb 15 Python
python模板入门教程之flask Jinja
Apr 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
php读取javascript设置的cookies的代码
2010/04/12 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
js几个验证函数代码
2010/03/25 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
深入源码解析Python中的对象与类型
2015/12/11 Python
利用信号如何监控Django模型对象字段值的变化详解
2017/11/27 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
wxpython布局的实现方法
2019/11/01 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
枚举与#define宏的区别
2014/04/30 面试题
秋季运动会加油稿200字
2014/01/11 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
雾霾停课通知
2015/04/24 职场文书
闪闪的红星观后感
2015/06/08 职场文书
钢琴师观后感
2015/06/12 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis