import java.util.*;
public class Solution {
//1.以第dp[i][j]结尾的最小路径和。
public static int minPathSum (int[][] matrix) {
// write code here
int m = matrix.length;
int n = matrix[0].length;
int[][] dp = new int[m+1][n+1];
//1,初始化 要保证dp数组的第一列和第一行填表时满足逻辑
dp[0][0] = matrix[0][0];
//处理第一行
for(int i=1;i<n;i++){
//前一个加当前值
dp[0][i] = matrix[0][i] +dp[0][i-1];
}
//处理第一列
for(int j=1;j<m;j++){
//上一个加当前值
dp[j][0] =matrix[j][0] +dp[j-1][0];
}
//2.填表
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
//取两种情况最小值,注意映射关系
dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1]) + matrix[i][j];
}
}
return dp[m-1][n-1];
}
}