礼物的最大价值

题目:礼物的最大价值
题目描述:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

示例 1:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 12
解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物

提示:
0 < grid.length <= 200
0 < grid[0].length <= 200

public class MaxValue {
public static void main(String[] args) {
int[][] arr = {{1,3,1},{1,5,1},{4,2,1}};
int result = getMaxValue(arr);
System.out.println(“礼物的最大价值为:” +result);
}

public static int getMaxValue(int[][] arr){
    //数组为空或者数组的长度为0,返回
    if (arr == null || arr.length == 0){
         return 0;
    }
    int rows = arr.length;  //行的长度;
    int cols = arr[0].length; //列的长度
    int [][] maxValue = new int[rows+1][cols+1];
    for(int i = 1;i<=rows;i++){
        for (int j = 1; j <= cols; j++) {

           maxValue[i][j] = Math.max(maxValue[i-1][j],maxValue[i][j-1])+arr[i-1][j-1];   //最大值等于(左方的值和上方的值)的最大值加上坐标为(i,j)的值。
        }
    }
    return maxValue[rows][cols]; //返回最后一个坐标的值。
}

}

/*

  • 思路:1、使用二维数组存储计算到礼物的最大值。
  •  2、maxValue(i,j)表示到达坐标为(i,j)时拿到的所有礼物的最大值
    
  •  3、题目说每次只能向左或者向下移动,所以有两种路径:(i-1,j)或者(i,j-1)
    
  •  4、中间计算出来的最大值maxValue(i,j) = max(maxValue (i-1,j),maxValue(i,j-1))+ arr[i][j];
    
  •  5、返回最后一个坐标的值就是礼物总和的最大值。
    
  • */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值