问题:有一个m x n网格(0 <= m, n <= 500)。网格中的每个单元格包含 k个硬币(k 也可以是负数或 0)。你从0, 0开始,到m-1, n-1结束,你可以向下移动 1 步或向右移动 1 步,收集尽可能多的硬币。如果k < 0,则该特定单元格有强盗,您无法进入该单元格。如果您进入8个相邻单元中的任何一个,您将被抢走k个硬币。当你到达m-1, n-1时你会有多少硬币?
例如在网格中:
0,23,20,-32
13,14,44,-44
23,19,41,9
46,27,20,0
ans = 129(按照路径:0-13-23-46-27-20-0)
时间限制:5秒
我不认为这个程序可以使用动态编程来解决。而且我还没有研究过图论(以防它可以用来解决这个问题)。直接递归的方法是我唯一能想到的,在给定的约束下效率太低了。
那么解决这个问题的好方法是什么?不要只是发布代码,告诉我如何开始。如果它与图论有关,那么指出涉及哪个定理将非常有用。