题目描述:给定一个 N*M 的矩阵arr,从左上角开始每次只能向下或者向右走,最后到达右下角。路径上所有点的数字和为 路径和,求最小的路径和。
典型的动态规划。状态方程为: dp[i][j] = getMin( dp[i - 1][j] ,dp[i][j - 1] ) + arr[i][i] 。dp[i][j] 表示 达到点 arr[i][j] 是的最小路径和,因为每次只能向下或者向右,所以要达到 arr[i][j] 必须先经过 arr[i - 1][j - 1] 或者 arr[i][j - 1] 其中一个点,找出路径最小的即可。
因为每次只能向下和向右,所以第一行只能从左一直往右走,而第一列只能从上一直往下走,并且将经过的点累加起来。
所以我们可以先对第一行、第一列的 dp[i][j] 进行初始化。
具体代码:
import java.util.Scanner;
/**
* 输入一个 N*M 的矩阵,从左上角开始,每次只能向下或者向右走,最后到达右下角的位置
* 将路径上所以数字加起来就是路径和,求最小路径和
*
* @author luzi
*
*/
public class minPathSumOfArr {
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
while(scan