我们有一个迷宫R X C,其中1 <= R,C <= 500。这个迷宫由-1到100的数字填充。现在,游戏如下:
如果方形中有-1,则认为这是一个石块 那个牢房,你不能穿过那个牢房。你可以从 第一列上的任何单元格(当然没有-1)并退出 上一栏中的任何单元格。你可以向上,向下,向右移动。如 你移动,你收集单元格中的数字,除了-1表示一个 大石头放在我们的迷宫里。每个单元格必须访问一次 仅
从左到右的路径是什么,您可以选择最大数字总和?简单 !! Dp可以做魔法,但是......这就是捕捉 - 规则5。
如果我们可以到达第一行或最下一行,我们可以离开迷宫。但是之后 发生了两件事:
a)我们失去了迄今收集的所有积分。
b)我们将迷宫放在同一列中但在相反的单元格中。
例如:考虑3X3迷宫(1指数)。所以,如果我们达到说,(1,2)我们可以从那里退出并失去所有积分并输入(3,2),游戏继续....
现在,我们必须找到maxiumum得分的路径。
我无法看到我们如何通过动态编程来捕捉这种跳跃并回到迷宫中?此外,我们必须得分&#39; 0&#39; 0每次我们这样做。
示例:
考虑迷宫:
-1 4 5 1
2 -1 2 4
3 3 -1 -1
4 2 1 2
回答= 16。
(4,1) - &gt; (4,2) - &gt; (1,2) - &gt; (1,3) - &gt; (2,3) - &gt; (2,4) - &gt; (1,4)
答案 0 :(得分:1)
运行您拥有的相同DP算法。完成一个列后,检查顶部/底部位置是否可访问(有一条路径可以到达那里并且它们没有被阻止)。
如果一个是可访问的而另一个不是假设您可以使用之前的分数0到达不可访问的那个(基本上再次运行计算但假设前一列的单元格得分为0)。
如果没有人可以访问,那么无事可做。
如果两者都可以访问,因为你在任何地方都得到了正分,所以放弃一些&gt; 0并从0再次开始是没有意义的。
答案 1 :(得分:1)
您应该能够从
获取解决方案列表(不经过-1)A) Left -> Right
B) Top -> Right
C) Bottom -> Right
然后你还应该能够从(没有-1)
获得路径列表D) Left -> Top
E) Left -> Bottom
从列表(B)中删除列表(D)中没有连接路径的任何内容。 从列表(C)中删除列表(E)中没有连接路径的任何内容。
然后从A,B,C中选择最高的解决方案。