礼物的最大价值
?
1.动态规划问题
这种求最大值的我们一般可以用动态规划求解。我们想清楚设置一个矩阵dp[m][n]的矩阵。每个元素代表的值则表示到达这个位置的最大值。
那么dp[0][0] 就为1,dp[0][1] 为 4 dp[0][2] 为3
dp[1][0] 就为2,dp[1][1] 为 多少呢?
我们只需要判断他的左边(dp[i][j-1])和上边(dp[i-1][j])谁的值最大。那么表达式就为
dp[i][j] = max(dp[i][j-1],dp[i-1][j])+arr[i][j]。
那么问题就来了,因为0-1=-1超过数组的下界,所以我们dp数组可以从1,1开始。
int x = i+1; int y = j+1; dp[x][y] = Math.max(dp[x][y-1],dp[x-1][y]) + grid[i][j];
完整代码:
public int maxValue (int[][] grid) { // write code here int[][] dp = new int[grid.length+1][grid[0].length+1]; int i = 0; int j = 0; for(;i){ for(j = 0;j ){ int x = i+1; int y = j+1; dp[x][y] = Math.max(dp[x][y-1],dp[x-1][y]) + grid[i][j]; } } return dp[i][j]; }
结果:
?

