【发布时间】:2013-05-10 09:16:56
【问题描述】:
我的问题如下: 我有一个任务列表,每个任务需要特定的时间并授予特定数量的积分,以及执行它们的时间“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 函数输入是@987654323 @ 应该是 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)
【问题讨论】:
-
只有我一个人,还是你从来不更新你的字典?
-
你是对的,如果你注意到的话,我实际上是在代码上方写的。这是我在介绍我的代码时需要帮助的事情之一。
-
编辑了我的答案,希望对您有所帮助。
-
它有帮助。我稍微修改了我的代码,所以我认为现在更容易理解了。我所有的东西都准备好了。我现在唯一要做的就是检查'mem' = 我的字典是否包含我正在寻找的答案。我真的很挣扎,我找不到一种方法将字典添加到我的代码中,这是有意义的。你能帮我最后的忙吗,这样我才能完成这个程序?
-
用你可能觉得有用的链接更新我的答案。
标签: python recursion memoization