leecode 剑指 Offer 47. 礼物的最大价值

剑指 Offer 47. 礼物的最大价值

在一个 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

解法:动态规划

思路:

动态规划,dp[i][j]从起点到(i,j)位置的最大价值
dp[i][0] = dp[i-1] + grid[i][0]
dp[0][j] = dp[0][j-1] + grid[0][j]
dp[i][j] = (dp[i-1][j] >= dp[i][j-1] ? dp[i-1][j]+grid[i][j] : dp[i][j-1] + grid[i][j])
 1 class Solution {
 2     public int maxValue(int[][] grid) {
 3 
 4         int rows = grid.length;
 5         int cols = grid[0].length;
 6         int[][] dp = new int[rows][cols];
 7         // 初始化边界
 8         dp[0][0] = grid[0][0];
 9         for(int i = 1; i < rows; i++){
10             dp[i][0] = dp[i-1][0] + grid[i][0];
11         }
12         for(int j = 1; j < cols; j++){
13             dp[0][j] = dp[0][j-1] + grid[0][j];
14         }
15 
16         // dp[i][j] = (dp[i-1][j] >= dp[i][j-1] ? dp[i-1][j]+grid[i][j] : dp[i][j-1] + grid[i][j])
17         for(int i = 1; i < rows; i++){
18             for(int j = 1; j < cols; j++){
19                 dp[i][j] = (dp[i-1][j] >= dp[i][j-1] ? dp[i-1][j]+grid[i][j] : dp[i][j-1] + grid[i][j]);
20             }
21         }
22         return dp[rows-1][cols-1];
23     }
24 }

leetcode运行时间为3ms, 空间为41.7MB

复杂度分析:

时间复杂度:遍历了grid数组,求出了所有的dp 值,所以时间复杂度为O(rows * cols)

空间复杂度:一个dp数组的大小,O(rows * cols)

小技巧:

给dp数组多开一行一列的空间可以使代码更加简洁:

 1 class Solution {
 2     public int maxValue(int[][] grid) {
 3 
 4         int rows = grid.length;
 5         int cols = grid[0].length;
 6         int[][] dp = new int[rows + 1][cols + 1];
 7 
 8         //  dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]) + grid[i-1][j-1]);
 9         for(int i = 1; i <= rows; i++){
10             for(int j = 1; j <= cols; j++){
11                 dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]) + grid[i-1][j-1];
12             }
13         }
14         return dp[rows][cols];
15     }
16 }
原文地址:https://www.cnblogs.com/hi3254014978/p/13750655.html