Python基于动态规划算法解决01背包问题实例
本文实例讲述了Python基于动态规划算法解决01背包问题。分享给大家供大家参考,具体如下:
在01背包问题中,在选择是否要把一个物品加到背包中,必须把该物品加进去的子问题的解与不取该物品的子问题的解进行比较,这种方式形成的问题导致了许多重叠子问题,使用动态规划来解决。n=5是物品的数量,c=10是书包能承受的重量,w=[2,2,6,5,4]是每个物品的重量,v=[6,3,5,4,6]是每个物品的价值,先把递归的定义写出来:

然后自底向上实现,代码如下:
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相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
相关文章
python NumPy ndarray二维数组 按照行列求平均实例
今天小编就为大家分享一篇python NumPy ndarray二维数组 按照行列求平均实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-11-11
详解python实现可视化的MD5、sha256哈希加密小工具
这篇文章主要介绍了详解python实现可视化的MD5、sha256哈希加密小工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
解决Python报错:SyntaxError: invalid character ‘,‘ (U+FF0C)
Python中的 SyntaxError错误是Python语言中常见的异常错误类型之一,表示语法错误,下面这篇文章主要给大家介绍了关于解决Python报错:SyntaxError: invalid character ‘,‘ (U+FF0C)的相关资料,需要的朋友可以参考下2022-12-12
基于PyQt5实现状态栏(statusBar)显示和隐藏功能
这篇文章主要为大家详细介绍了如何利用PyQt5实现状态栏显示和隐藏功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助2022-08-08


最新评论