【每日一题Day140】剑指 Offer 47. 礼物的最大价值 | 动态规划 记忆化搜索
创始人
2024-05-30 21:40:29
0

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

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

找回了点自信

动态规划

  • 思路:动态规划

    这题动态规划还是挺明显的,到达每个格子所能获得的最大价值由其上面的格子获得的价值和其左边的格子获得的价值的最大值决定,因此可以定义状态dp[i][j]为到达格子grid[i][j]所获得的最大价值,最后返回dp[m-1][n-1]即可

    • 状态转移方程为
      dp[i][j]=Math.max(dp[i−1][j],dp[i][j−1])+grid[i][j];dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1])+grid[i][j]; dp[i][j]=Math.max(dp[i−1][j],dp[i][j−1])+grid[i][j];
  • 实现

    实现时防止越界,扩一行一列

    class Solution {public int maxValue(int[][] grid) {int m = grid.length, n = grid[0].length;int[][] dp = new int[m + 1][n + 1];for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){   dp[i + 1][j + 1] = Math.max(dp[i + 1][j], dp[i][j + 1]) + grid[i][j];}}return dp[m][n];}
    }
    
    • 复杂度
      • 时间复杂度:O(nm)O(nm)O(nm)
      • 空间复杂度:O(nm)O(nm)O(nm)
  • 空间优化:

    • 每一行的状态只依赖于前一行的状态,因此可以用两个长度为n+1的数组实现

      class Solution {public int maxValue(int[][] grid) {int m = grid.length, n = grid[0].length;int[][] dp = new int[2][n + 1];for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){   dp[(i + 1) % 2][j + 1] = Math.max(dp[(i + 1) % 2][j], dp[i % 2][j + 1]) + grid[i][j];}}return dp[m % 2][n];}public int dfs(int[][] grid, int i, int j, int sum){if (i == grid.length || j == grid[0].length){return sum;}sum += grid[i][j];int right = dfs(grid, i, j + 1, sum);int left = dfs(grid, i + 1, j, sum);return Math.max(left, right);}
      }
      
      • 复杂度
        • 时间复杂度:O(nm)O(nm)O(nm)
        • 空间复杂度:O(n)O(n)O(n)
    • 一个长度为n+1的一维数组

      class Solution {public int maxValue(int[][] grid) {int m = grid.length, n = grid[0].length;int[] dp = new int[n + 1];for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){   dp[j + 1] = Math.max(dp[j], dp[j + 1]) + grid[i][j];}}return dp[n];}
      }
      
      • 复杂度
        • 时间复杂度:O(nm)O(nm)O(nm)
        • 空间复杂度:O(n)O(n)O(n)
    • 原地修改:

      class Solution {public int maxValue(int[][] grid) {int m = grid.length, n = grid[0].length;for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){   grid[i][j] += Math.max(i > 0 ? grid[i - 1][j] : 0, j > 0 ? grid[i][j - 1] : 0);}}return grid[m - 1][n - 1];}}
      

记忆化搜索

  • 思路

    • 由于右下角的价值和与左边的价值和和上面的价值和的最大值相关,并且整个回溯过程有大量重复递归调用的,因此可以采用记忆化搜索和dp的方法实现
    • 定义 f(grid,i,j)f(grid,i,j)f(grid,i,j) 表示到达第iii行第jjj列格子时,获得的最大价值,那么 f(grid,m−1,n−1)f(grid,m-1,n-1)f(grid,m−1,n−1) 即为最终结果
    • 使用dp数组记录已经搜索过的方案数,dp[i][j]dp[i][j]dp[i][j]数组的含义同f函数
  • 实现

    class Solution {int[][] dp;public int maxValue(int[][] grid) {int m = grid.length, n = grid[0].length;dp = new int[m][n];return dfs(grid, m - 1, n - 1 );}public int dfs(int[][] grid, int i, int j){        if (i < 0 || j < 0){return 0;}if (dp[i][j] > 0) return dp[i][j];int right = dfs(grid, i - 1, j);int left = dfs(grid, i, j - 1);dp[i][j] = Math.max(left, right) + grid[i][j];return dp[i][j];}
    }
    
    • 复杂度

      • 时间复杂度:O(2n+m)O(2^{n+m})O(2n+m)

      • 空间复杂度:O(m+n)O(m+n)O(m+n)

相关内容

热门资讯

《秋天的雨》说课稿 《秋天的雨》说课稿(通用5篇)  《秋天的雨》是九年义务教育人教版第五册第三组的第三篇精读课文,课文...
校园运动会通讯稿范文 校园运动会通讯稿范文  坚定,执着,耐力与希望,在延伸的白色跑道中点点凝聚!力量,信念,拼搏与奋斗,...
四年级语文说课稿 四年级语文说课稿模板  作为一名人民教师,往往需要进行说课稿编写工作,借助说课稿可以有效提升自己的教...
四年级数学下册《小数的意义》... 四年级数学下册《小数的意义》说课稿(通用7篇)  作为一位不辞辛劳的人民教师,总归要编写说课稿,借助...
《草虫的村落》的评课稿 《草虫的村落》的评课稿范文  打开六年级上册第一组课文,一股素雅温馨的自然风裹挟着鸟语花香,虫鸣犬吠...
一年级新生家长会发言稿 一年级新生家长会发言稿【精选】  家长会,一般是由学校或教师发起的,面向学生、学生家长,以及教师的交...
读书分享会发言稿 读书分享会发言稿范文(精选23篇)  在当今社会生活中,我们使用上发言稿的情况与日俱增,发言稿是一种...
小学秋季开学典礼校长发言稿 小学秋季开学典礼校长发言稿范文  在充满活力,日益开放的今天,发言稿的使用越来越广泛,发言稿要求内容...
数学评课稿 数学评课稿(精选22篇)  评课是教学、教研工作过程中一项经常开展的活动。评课的类型很多,有同事之间...
师风师德发言稿 师风师德发言稿(精选6篇)  在充满活力,日益开放的今天,能够利用到发言稿的场合越来越多,发言稿以发...
《脚内侧踢毽球》说课稿 《脚内侧踢毽球》说课稿  尊敬的各位评委老师:  大家好!  我叫彭燕飞,今天我说课的内容是:脚内侧...
诚信应考的国旗下讲话稿 诚信应考的国旗下讲话稿范文(精选6篇)  在充满活力,日益开放的今天,很多地方都会使用到讲话稿,讲话...
《猫》说课稿 《猫》说课稿  第一课时重点扫除阅读障碍,读准读通,整体感知文本“美”  一。教学目标:  1.通过...
一切为了孩子发言稿 一切为了孩子发言稿尊敬的各位家长朋友:  大家下午好!大家在百忙之中到学校参加家长会,说明大家对自己...
100加油稿左右 100加油稿100字左右  100加油稿100字左右(一)  飒飒的秋风为你送来爽朗的气息。朋友,在...
《破阵子·为陈同甫赋壮词以寄... 《破阵子·为陈同甫赋壮词以寄之》说课稿  我说课的题目是《破阵子为陈同甫赋壮词以寄之》,从教材、教育...
家委会的发言稿 家委会的发言稿 15篇  在快速变化和不断变革的新时代,需要使用发言稿的事情愈发增多,通过对发言稿语...
《相同图样排排队》说课稿 《相同图样排排队》说课稿  《相同图样排排队》为苏少版小学美术教材二年级上册第七课内容,属于“设计应...
小学二年级数学《观察物体》优... 小学二年级数学《观察物体》优秀说课稿  下面是小学二年级数学《观察物体》说课稿,小学二年级数学《观察...
高三开学典礼发言稿 高三开学典礼发言稿  又个新学期如期而至,让我们以饱满的热情和充足的精力去迎接他吧,高三开学典礼发言...