
本文介绍了Python如何基于动态编程算法解决01背包问题. 与您分享以供参考,如下:

在01背包问题中动态规划法 01背包,当选择是否向背包中添加项目时,将必须添加到该项目的子问题的解决方案与不占用该项目的子问题的解决方案进行比较. 该问题导致许多重叠的子问题,这些问题可以使用动态编程解决. n = 5是物品的数量,c = 10是书包可以承受的重量动态规划法 01背包,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编程的每个人都有帮助.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-171912-1.html
正确