【发布时间】:2014-02-06 13:36:45
【问题描述】:
所以我在翻书时偶然发现了一个有趣的问题。 你得到一个 N*M 矩阵,你必须从坐标 (1,1) 到 (n,m)。
给你三种类型的“操作”来交叉矩阵。
'A'- You go from i,j to i+1,j
'B'- You go from i,j to i,j+1
'C'- You go from i,j to i+1,j+1
每次你越过一个元素,你就把它加到你的“总和”中。您被要求:
- 找出你能收集到的最大数量。
- 在不使用/重新使用 N*M 矩阵的情况下重建路线。
我没有解决 (1) 动态编程的问题,但是 (2) 让我陷入了困境。这本书对第(2)点没有任何解释。想知道你们中是否有人遇到过类似的事情。
【问题讨论】:
-
econstruct the rout 更准确地说是什么意思?一系列 A、B 和 C?
-
您可以将问题简化为 DAG 中的最短路径问题(根据定义,它没有负循环),只需使用 Bellman-Ford 算法在
-1*X上找到最短路径(X是你的矩阵)。 -
@Mihai Bratulescu 重建路线意味着打印您从 (1,1) 到 (n,m) 的一系列动作
-
@amit Belman-Ford 也是动态编程方法。这只是一个流行的。我并不是说你的评论是错误的,但我只是说 OP 可能正在使用它(没有意识到)。使用 Bellman-Ford 恢复解决方案与我相信的任何其他 DP 一样困难(恕我直言,一点也不难)。
-
@IvayloStrandjev 这就是为什么它是评论而不是答案。它对问题给出了不同的看法,可能对 OP 有所帮助,但它没有回答问题。
标签: algorithm