我能想到的是,如果我们从最后一行开始然后向上移动那么我们必须寻找时间复杂度O(2^n)
的所有可能组合,但是还有另一种有效的方法可以解决这类问题?
答案 0 :(得分:0)
这是shortest path problem的变体,您的图表是:
G = (V,E)
V = { (x,y) | for each cell in the matrix } U { (-1,-1) } //assuming 0 based matrix
E = { ((x1,y),(x2,y+1)) | x1 < x2 } // or x1<=x2 - depends if you can go straight down
w((x1,y1),(x2,y2)) = value(x2,y2) //weight function
现在,这是一个图表(实际上是偶数Directed Acyclic Graph - DAG),您可以在其中将单最短路径算法从单个来源(-1,-1)
应用到格式为(x,n-1)
的多个目标 - 其中n
是总行数。解决它的一种算法是Dijkstra's Algorithm。
在理解这是一个DAG后,我们甚至可以使用直接DP解决方案进一步优化它(实际上模仿最短路径算法,但利用DAG功能):
D(-1,-1) = 0
D(x,y) = min { D(x', y-1) | for each x'>x } U {infinity} + value(x,y)
最终答案是min{ D(x,n-1) | for all values of x}
。
此解决方案在O(n*m*m)
中运行,其中n
是行数,m
是列数。