【发布时间】:2017-08-02 04:11:59
【问题描述】:
我有一个正在尝试解决的编程问题,但我不知道从哪个方向开始。
问题如下:
如果我们有一些 nxn 方格板(本质上是一个二维数组),网格的每个方格中都有一个数值(负数、零或正数)。游戏的指导方针是,您可以在棋盘上的任何位置从您的“令牌”开始,并且您只能向右或向下移动您的令牌(以任何顺序)。对于您输入的每个方格,您从分数中添加或减去该总分,您的目标是在离开右侧或底部边缘的任何方格之前累积可能的最高分数。
这类似于我过去看到的其他动态编程问题(想到单词对齐),但我正在努力从哪里开始,而实际上没有采用动态编程的蛮力方法(为每个右侧和底部边缘的正方形,但最终会得到(2n 个大小为 n^2 的表,运行时会很糟糕)。
你会推荐什么作为这个问题的起点,以达到尽可能高的分数,同时仍然尽可能地保持算法的时间和空间效率?
【问题讨论】:
-
您只需要一张 n^2 大小的表格 - 您唯一需要记住的是每个方格可以获得的最大可能分数。
标签: algorithm dynamic-programming