public static int minPathSum(int[][] grid) {
        // write your code here
        int[][]A=grid;
        int m=A.length, n=A[0].length;
        int[][]t=new int[m][n];
        t[0][0]=A[0][0];
        for (int i=1;i<m;++i) 
            t[i][0]=A[i][0]+t[i-1][0];
        for (int j=1;j<n;++j)
            t[0][j]=A[0][j]+t[0][j-1];
        for (int i=1;i<m;++i)
            for (int j=1;j<n;++j)
                t[i][j]=Math.min(t[i-1][j],t[i][j-1])+A[i][j];
        return t[m-1][n-1];
    }