网格中的最优运动

时间:2014-02-22 13:12:32

标签: algorithm graph dynamic-programming

有一个大小为N * M的迷宫,由单位块组成。起初,爱丽丝拥有K%的能量。 现在Alice从第1行开始向第N行移动。从当前块开始,她可以移动到下一行中的块,该块位于当前块的右侧或左侧。在第i行第j列移动到一个块时,如果C(i,j)大于0,她的能量将减少C(i,j)百分比,否则它将由C(i,j)百分比再充电

例如,如果她有50%的能量,在移动到C(i,j)= 15的阻挡时,她将剩下35(50-15%)的剩余。

现在的任务是找出Alice能量的最终状态,如果她最佳地移动以节省最大能量。

注意:她的精力不会超过100%,如果能量下降到0%,她就不会进一步活动。

示例:让我们假设一个4 * 4的网格如下:

2 -2 2 -2

-2 2 -2 2

1 -1 1 -1

-1 1 -1 1

如果K = 10意味着她在开始时有10%的能量。然后在达到第4行后,她将获得16%的能量。最佳移动之一将是< 1,2>。 - > < 2,1> - > < 3,2> - > < 4,1>

所以这里答案是16。

1 个答案:

答案 0 :(得分:1)

我原本说你可以自下而上解决这个问题,但是手工做的例子我将从上到下工作,因为一旦你的能量降到零你就无法继续下去 - 它没有'在这里发挥作用,但如果你从上到下工作,它看起来要容易得多。校长大致相同 - 逐行工作,并在每个阶段写下可能通过每个单元格的最佳分数,使用前一行的答案来计算当前行的答案。

我们从10开始,我假设你可以从任何你想要的地方开始,所以只需从10中减去最上面一行,找出你可以在最上面找到的最好的行,包括你从单元格中获得的能量差异现在开始了。顶行变为8,12,8,12。

下一行的边缘单元只能以一种方式到达。可以通过两种方式到达内部细胞。在任何一种情况下,我们通过考虑来自该细胞的能量差异以及来自您来自细胞的能量来计算总数,当有两个细胞时采取最有希望的选择。所以我们得到14,10,14,10,例如第二个14是上面第12个中的一个,在它的左边或上面,两个是右边(如果得分不同,我们可以采取最好的)与-2相结合那个牢房。

同样地,我们下一行有9,15,9,15,底部有16,8,16,8,例如,到达左下角的唯一方法是从上面的15和它到右边,所以调整为-1,我们将15变为16.有两种方法可以到达右边的单元格,但它们都从9开始,所以调整为1,得到8。

如果你需要整条路径,你可以在计算最佳成本时跟踪你进入每个单元格的方式,然后在完成后跟踪最佳答案。