
解题思路1:

import java.util.*;
//二维动态规划,创建一个dp二维数组,长度比grid大一
//dp中存放对应的grid数组中走到这个位置的礼物最大价值,
//状态转移方程:
//dp[i][j] = Math.max( dp[i-1][j] + grid[i-1][j-1], dp[i][j-1] + grid[i-1][j-1])
public class Solution {
/**
* @param grid int整型二维数组
* @return int整型
*/
public int maxValue (int[][] grid) {
// write code here
int[][] dp = new int[grid.length + 1][grid[0].length + 1];
//行
for (int i = 1; i < dp.length; i++) {
//列
for (int j = 1; j < dp[0].length; j++) {
dp[i][j] = Math.max(dp[i - 1][j] + grid[i - 1][j - 1],
dp[i][j - 1] + grid[i - 1][j - 1]);
}
}
return dp[dp.length - 1][dp[0].length - 1];
}
}