01背包问题动态规划递归式,0-1背包问题动态规划算法python
一个包可以装4公斤。现在有四样东西。重量分别为1kg、4kg、3kg、1kg,数值为1500、3000、2000、2000。
现在包里装的东西价值最大,但不能超过背包的最大载重量。
几样东西的重量
w=[ 0,1,4,3,1 ]
一些物品的价值
v=[ 0,1500,3000,2000,2000 ]
#项目数量
n=len(w )- 1
包的重量
m=4
#创建代表包中项目的列表。如果元素为True,则包含相应的元素。
x=[]
#放在袋子里的价值总和
值=0
#在前I项中,当装载量为J时,排列代表放入袋子中的最大值的矩阵,表[i][j]
table=[0 for iinrange(m1)]for jinrange(n1)]
动态(W,V,N,M,X):
表格矩阵计算
for range(1,n ^ 1):#表示一个想法接一个想法。
Fornrange (1,m 1): #)的意思是一点一点考虑子背包的大小。
If(j=w[I]): #)当背包尺寸大于物体重量时,可以考虑放进去
表[i][j]=max(表[i-1][j],表[i-1][j-w[i]] v[i])
否则:
如果没有table[i][j]=table[i -1][j] #输入,将继承以前的值。
#递归地把对象放在背包里寻找跳跃的地方,从最后的结果往回推。
j=m
forIinrange(n,0,-1):
Iftable [I] [j] table [I-1] [j]: #如果再增加一项会增加价值,请将其添加到列表中。
X.申请(I))。
J=j-w[i] #这是背包剩余部分的负荷。
#返回最大值,即表格中最后一行和最后一列的值
值=表[n][m]
返回值
Print(最大值为,str) dynamic (w,v,n,m,x))
Print(项目索引:,x))。
PS:python动态规划背包问题
将numpy作为np导入
defbag(重量,数值,重量_控制) :
num=Len(重量)
体重。insert (0 0,0))。
values.insert (0,0)).
包=NP。零((num1,weight_cont 1),dtype=np.int))).
forIinrange(1,编号1):
forjinrange(1,weight_cont 1):
如果j=重量[i]:
Bag[i][j]=max(bag[i-1][j],bag [I-1] [j-weight [i]]值[I])
否则:
袋[I][j]=袋[i][j-1]
返回包[-1][-1]
if __name__==__main__ :
重量=[ 1,2,4,10,12]
值=[ 1200,1500,2000,1300,2500 ]
权重_控制=20
(re=Bag(Weight,values,weight_cont))))))))).
是,打印(重新)
至此,我已经介绍了这篇关于python实现动态编程背包的文章。关于python动态规划背包的内容,请搜索之前的文章或者继续查看以下相关文章。以后请多多关照。
题目:动态规划背包问题的python实现分析
本文地址:3358 www . CPP cns.com/jiao本/python/372287.html
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。