有N×N大小的数组填充随机数(-100 <= x <= 100)
从A [0] [0]开始, 它分阶段移动到相邻的指数。
限制。
无法转移到访问过的索引。
无法上升。
当它完成移动到A [N-1] [N-1]时,我必须得到最大的价值。
我访问过的指数中的值应该加到总和
中解决这个问题的方法是什么?
[edit]
一个更紧凑的问题陈述:给定一个正方形N * N矩阵,找到沿着从[0] [0]开始到结束的相邻节点(无对角线)的任何探索路径上被访问元素的最大总和[N-1] [N-1]在以下限制范围内:
答案 0 :(得分:1)
您需要一个2D状态D[i][j]
,它会在第i
列的行j
之前跟踪最大总和。第一行很容易填充 - 它只是矩阵的前缀和&#39;第一行。
对于所有后续行,您可以使用以下想法:您可能已将上一行留在任何列。如果您知道前一行的退出列和当前行的退出列(由您要计算的状态定义),则您知道该总和包含前一行的退出列的累计值加上两个出口列之间当前行中的所有值。从上一行的所有可能的退出列中,选择产生最大总和的那一列:
D[i][j] = max_k (D[i - 1][k] + Sum{m from j to k} A[i][m])
请注意,对于所有可能的k
,可以递增计算此总和。符号Sum{m from j to k}
也应该对小于j的k
有效,这意味着向后遍历该行。
逐行计算这些状态,直到最后为D[N-1][N-1]
,然后为您的问题保留解决方案。