题目描述
礼物的最大价值_牛客题霸_牛客网
解题思路
这是一个典型的动态规划问题。我们可以使用一个二维数组 dp[][]
来存储到达每个格子时可以获得的最大价值。状态转移方程为 dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j]
,表示到达当前格子的最大价值是从上面格子或左边格子中选择最大值,并加上当前格子的价值。
代码实现
package study2.day19;
//礼物的最大价值
public class Test2 {public int maxValue (int[][] grid) {int n = grid.length;int m = grid[0].length;int[][] dp = new int[n + 1][m + 1];for(int i = 1;i <= n;i++ ){for(int j = 1;j <= m;j++){dp[i][j] = Math.max(dp[i][j - 1],dp[i - 1][j]) + grid[i - 1][j - 1];}}return dp[n][m];}
}
总结
动态规划问题通过将问题分解成子问题,并将其解的结果存储起来,可以有效地降低时间复杂度。在解决类似路径问题时,可以使用动态规划思想,将路径的最优解存储起来,从而快速求解出整体最优解。
希望这篇博客能帮助你更好地理解和应用动态规划解决问题的方法!