动态编程“Solitare棋盘游戏”

时间:2017-03-11 23:00:59

标签: algorithm dynamic-programming

我有一个编程问题,我正在尝试解决,但我陷入了开始的方向。

问题如下:

  

如果我们有一些nxn方板(基本上是一个二维数组),网格的每个方格都有一个数值(负数,零或正数)。游戏的指导原则是您可以在棋盘上的任何位置开始使用“令牌”,并且您只能向右或向下移动您的令牌(以任何顺序)。对于您输入的每个方格,您可以在分数中添加或减去该总数,并且您的目标是在移出右边或底边的任何方格之前累积最高分数。

这类似于我过去看到的其他动态编程问题(字对齐浮现在脑海中),但是我正在努力从哪里开始,而不是基本上采用动态编程的强力方法(每个都有memoize表)右边和底边都是正方形,但最后你会得到(2n个大小为n ^ 2的表格,运行时间会非常残酷)。

为了获得尽可能高的分数,您会建议作为此问题的起点,同时仍然尽可能保持算法的时间和空间效率?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以创建一个nxn表,其中的条目是

table[i][j] = board[i][j] + max(table[i][j-1], table[i-1][j])

table[-1][j] = INT_MIN for all j

table[i][-1] = INT_MIN for all i

(表格是最高分数的表格,并列出了您给出的实际董事会。)