二维矩阵从左上角到右下角路径的最小和(JAVA代码)—动态规划
给定一个二维数组m行,n列。假设这个二维数组中每个单元格的值都是正整数,表示从该单元格经过时需要花费的成本。
那么求从右上角第一个单元格到右下角最后一个单元格的路径中,花费的最小成本是多少?
约束条件为:你只能向右,向下,或者向右下(对角线方向)走。
例如:
给定一个m=3,n=3的二维数组cost,如下图所示,从左上角的第一个单元格出发,可以向右,向下,或者向右下(对角线方向)走,最终达到右下角。
走过的路径为:(0, 0) –> (0, 1) –> (1, 2) –> (2, 2).
在这个过程中,花费的最小成本为: (1 + 2 + 2 + 3).=8
算法分析
这时一个典型的可以使用动态规划来求解的问题。
我们来看,开辟一个dp数组用来存放从原来cost数组左上角第一个格子开始走过的路径的最小成本值。
那么 dp[i][j] 就表示到达该单元格时所花费的最小成本,那么dp数组最右下角的值就是我们要求解的值。
我们采用动态规划制表法来填充dp数组的每一个单