二维数组1.礼物最大价值

在一个mn的棋盘上每格都有一个礼物,价值都大于0,从左上角开始拿格子里的礼物,直到到右下角,求最大价值的礼物为多少。 在一个mn的棋盘上每格都有一个礼物,价值都大于0,从左上角开始拿格子里的礼物,直到到右下角,求最大价值的礼物为多少。 dp[i][j]表示这个位置能拿到的最大价值,他怎么得到呢,可能由它上面得到,可能从左边得到所以dp[i][j]=max(dp[i-1][j]+num[i][j],dp[i][j-1]+nums[i][j]) 这个不太好优化空间,因为如果要优化,需要从右开始,但是这个是从左开始的,所以很难办。

class Solution {
          
   
    public int maxValue(int[][] grid) {
          
   
        int[][] dp=new int[grid.length+1][grid[0].length+1];
        for(int i=1;i<=grid.length;i++){
          
   
            for(int j=1;j<=grid[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[grid.length][grid[0].length];
    }
}
经验分享 程序员 微信小程序 职场和发展