【发布时间】:2021-07-16 02:37:28
【问题描述】:
我一直在对盗屋问题进行轻微修改。
我能够生成递归关系并对其进行编程以找到最大总数。
def mod_robber(arr):
arr[1] = max(arr[0], arr[1])
for i in range(2, len(arr)):
arr[i] = max(arr[i]+arr[i-2], arr[i-1])
return arr[-1]
但是,我想找出哪些 房屋可以抢劫。例如;如果我给它数组 [1, 2, 3, 1] 它会适当地返回 4,但我希望它返回 [1, 3]。
这是一种自下而上的方法,我用最新的最大值填充列表的每个索引,然后返回最后一个元素。所以,在这个例子中; [1, 2, 3, 1] 在以 4 为最大值的循环运行后变为 [1, 2, 4, 4]。
我偷偷地怀疑我应该反向遍历修改后的列表 [1, 2, 4, 4],然后从最大值中减去。但我无法完全找到一种方法来使其在所有情况下都能正常工作。
我还发现了this 的帖子,问了一个类似的问题。但是给出的答案都是计算最大和,而不是返回适当的索引。
非常感谢您的集体智慧。
【问题讨论】:
-
请从intro tour 重复on topic 和how to ask。 “告诉我如何解决这个编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后然后就您的算法或技术提出一个具体的问题。 Stack Overflow 无意取代现有的文档和教程。
-
您似乎在要求我们为您编写代码——只是为了更新和存储您找到的位置的坐标。有许多示例说明如何将结果附加到累积列表中。因此,您应该尝试完整的编码,而不是 sn-p 和一般描述。
-
所以我应该复制/粘贴我之前所做的所有尝试?因为那将是一个更长的帖子。而且我并不是真的要求某人为我编写代码。更像是什么其他方法呢?我试过保留并附加到单独的列表中。我试过向后遍历列表并减去。我什至尝试了蛮力,生成所有可能的有效列表并返回具有最大总和的列表。这是唯一有效的方法,但速度非常慢。
-
您最初的问题已经在“如何提问”中得到解答。如“主题”中所述,此处对替代算法的开放式讨论是题外话。请参阅all sites 为这个问题选择合适的 Stack Exchange 站点。
标签: python list algorithm dynamic