我的问题如下:我有一个任务列表,每个任务都需要特定的时间并授予特定数量的积分,以及执行它们的时间“k”:
例如: missions = [(14,3),(54,5),(5,4)]
和time = 15
在这个例子中,我有 3 个任务,第一个任务给我 14 分,需要 3 分钟。我总共有 15 分钟。每个任务都是一个元组,第一个值是这个任务的点数,第二个值是执行这个任务所需的分钟数。
我必须使用记忆递归地找到我能够在给定的任务列表和给定的时间内获得的最大点数。
我正在尝试实现一个名为 choose(missions,time) 的函数,该函数将递归操作并使用函数 choose_mem(missions,time,mem,k) 来实现我的目标。函数choose_mem 应该得到'k',它是可供选择的任务数,mem 是一个空字典,mem,它将包含之前已经解决的所有问题。
这就是我到目前为止所得到的,我需要帮助来实现上面的要求,我的意思是字典的使用(目前就在那里并且一直是空的),还有我的 choose_mem 函数输入i,j,missions,d
和它应该在choose_mem(missions, time, mem, k)
哪里mem = d 和 k 是可供选择的任务数。
如果有人可以帮助我调整我的代码,将不胜感激。
mem = {}
def choose(missions, time):
j = time
result = []
for i in range(len(missions), 0, -1):
if choose_mem(missions, j, mem, i) != choose_mem(missions, j, mem, i-1):
j -= missions[i - 1][1]
return choose_mem(missions, time, mem, len(missions))
def choose_mem(missions, time, mem, k):
if k == 0: return 0
points, a = missions[k - 1]
if a > time:
return choose_mem(missions, time, mem, k-1)
else:
return max(choose_mem(missions, time, mem, k-1),
choose_mem(missions, time-a, mem, k-1) + points)