礼物的最大价值

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<grid.length;i++){
        for(j = 0;j<grid[0].length;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];
}

结果:

posted @ 2022-04-25 17:27  写代码的小哥哥  阅读(49)  评论(0)    收藏  举报