【问题标题】:Dynamic Programming "Solitare Board Game"动态规划“纸牌游戏”
【发布时间】:2017-08-02 04:11:59
【问题描述】:

我有一个正在尝试解决的编程问题,但我不知道从哪个方向开始。

问题如下:

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

这类似于我过去看到的其他动态编程问题(想到单词对齐),但我正在努力从哪里开始,而实际上没有采用动态编程的蛮力方法(为每个右侧和底部边缘的正方形,但最终会得到(2n 个大小为 n^2 的表,运行时会很糟糕)。

你会推荐什么作为这个问题的起点,以达到尽可能高的分数,同时仍然尽可能地保持算法的时间和空间效率?

【问题讨论】:

标签: algorithm dynamic-programming


【解决方案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

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

【讨论】:

  • 谢谢你,我不知道我是怎么错过的,我猜直到我看到它写下来才有意义。
猜你喜欢
  • 2013-05-12
  • 2011-07-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
相关资源
最近更新 更多