直接上代码,搜到这个的人应该是都看过题了
从网上搜了半天也没找见能理解的代码,今天终于自己研究出来了,学算法的最好方法可能就是带入值然后在脑回路里模拟执行过程,还有一个地方想吐槽,算法这东西写的太简洁,感觉每行都注释一遍都不过分,因为时间比较紧急,我先注释最不好理解的一部分,如果还有不懂的可以留言或者,加我探讨
tr=[None,{'w':4,'v':3000},{'w':3,'v':2000},{'w':1,'v':1500}]
max_w=4
#初始化字典的方法
m={(i,w):0 for i in range(len(tr)) for w in range(max_w+1)}
for i in range(1,len(tr)):
for w in range(1,max_w+1):
if tr[i]['w']>w:
m[(i,w)]=m[(i-1,w)]
else:
m[(i,w)]=max(
#第i个物体的上一个即为当前最优解也就是最大值,与下面新添加物体进行比较
m[i-1,w],
#装载第i个物体后,剩余空间(剩余重量)可装的物体的最大值+第i个物体的价值
m[(i-1,w-tr[i]['w'])]+tr[i]['v']
#前面那一截m[XXX]就是运算剩余空间能装物体的最大值,这个最大值是之前就计算好保存在表格里的
)
print (m[(len(tr)-1,max_w)])