最近在看《漫画算法》学习到了很多的算法知识,但是里面代码是java实现的,所以在这里想写一版python实现的代码,一是加深一下印象,二是希望对有需要的小伙伴们有所帮助
表格如下:
1个工人 | 2个工人 | 3个工人 | 4 个工人 | 5个工人 | 6个工人 | 7个工人 | 8个工人 | 9个工人 | 10个工人 | |
---|---|---|---|---|---|---|---|---|---|---|
400kg/5 | 0 | 0 | 0 | 0 | 400 | 400 | 400 | 400 | 400 | 400 |
500kg/5 | 0 | 0 | 0 | 0 | 500 | 500 | 500 | 500 | 500 | 500 |
200kg/3 | 0 | 0 | 200 | 200 | 500 | 500 | 500 | 700 | 700 | 900 |
300kg/4 | 0 | 0 | 200 | 300 | 500 | 500 | 500 | 700 | 800 | 900 |
350kg/3 | 0 | 0 | 350 | 350 | 500 | 550 | 650 | 850 | 850 | 900 |
python代码:
import copy
def bestWay(w,p=[],g=[]):
n = len(g)#金矿数
res=[0]*(w+1)#存放上一行表格
arr=[0]*(w+1)#存放当前结果
#此处列表长度为w+1,为了防止j-p[i]的值为-1取到后面的值
for i in range(n):
for j in range(w,1,-1):
if j >= p[i]:
arr = max(res[i],res[j-p[i]]+g[i])
res = copy.deepcopy(arr)
return res[w]
if __name__ = '__main__':
res = bestWay(10,[400,500,200,300,350],[5,5,3,4,3])
print[res]