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 相关文章推荐
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
Python格式化输出%s和%d
May 07 Python
Python 判断奇数偶数的方法
Dec 20 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
Python Django实现layui风格+django分页功能的例子
Aug 29 Python
python创建学生管理系统
Nov 22 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 Python
用python进行视频剪辑
Nov 02 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
Jun 05 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下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
js中的string.format函数代码
2020/08/11 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
PHP笔试题
2012/02/22 面试题
老师给学生的表扬信
2014/01/17 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
培训计划通知
2015/07/15 职场文书
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers