tr = {(2, 3), (3, 4), (4 ,8), (5, 8), (9, 10)}
max_w = 5
m = {}
# 初始化记忆化表格
# key是(宝物组合,最大重量), value是最大价值
def thief(tr, w):
if tr == set() or w == 0:
m[(tuple(tr), w)] = 0
return 0
elif (tuple(tr), w) in m:
return m[(tuple(tr), w)]
else:
vmax = 0
for t in tr:
if t[0] <= w:
v = thief(tr - {t}, w - t[0]) + t[1]
vmax = max(vmax, v)
m[(tuple(tr), w)] = vmax
return vmax
print(thief(tr, max_w))
for i in m:
print(i)
for j in m.values():
print(j)
【递归联系】博物馆大道问题
最新推荐文章于 2022-12-31 17:50:11 发布