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进行稳定可靠的文件操作详解
Dec 31 Python
零基础写python爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
python实现文件快照加密保护的方法
Jun 30 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
python由已知数组快速生成新数组的方法
Apr 08 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
python实现邮件循环自动发件功能
Sep 11 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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面向对象的使用教程 简单数据库连接
2006/11/25 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
PHP修改session_id示例代码
2014/01/08 PHP
php实现的用户查询类实例
2015/06/18 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
python求解水仙花数的方法
2015/05/11 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Python 统计字数的思路详解
2018/05/08 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
车工岗位职责
2013/11/26 职场文书
公司委托书范本
2014/04/04 职场文书
企业2014年度工作总结
2014/12/10 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
九年级历史教学反思
2016/02/19 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
mysql幻读详解实例以及解决办法
2022/06/16 MySQL