由于只能方向向右或者向下,因此第m行第n列的值只能来自于m-1行n列或者m行n-1列再加上grid[m][n],所以可知maxSum[i][j] = Math.max(maxSum[i - 1][j], maxSum[i][j - 1]) + grid[i - 1][j - 1];

 public int maxValue (int[][] grid) {
        // write code here
        int m = grid.length, n = grid[0].length;
        int[][] maxSum = new int[m + 1][n+ 1];
        for(int i = 1; i <= m; i++)
            for(int j = 1; j <= n; j++){
                maxSum[i][j] = Math.max(maxSum[i - 1][j], maxSum[i][j - 1]) + grid[i - 1][j - 1];
            }
        return maxSum[m][n];
    }