【学会动态规划】礼物的最大价值(7)

简介: 【学会动态规划】礼物的最大价值(7)

动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

题目链接:剑指 Offer 47. 礼物的最大价值 - 力扣(Leetcode)

题目不难理解:总结来讲就是从左上角开始拿礼物,

只能往右或者往下找,在右下角结束,返回最大的礼物价值即可。

2. 算法原理

1. 状态表示

dp[ i ][ j ] 表示:到达[ i,j ]位置的时候,此时的最大价值

2. 状态转移方程

dp[ i ][ j ]有两种情况:

第一种是从上面来的礼物最大价值:dp[ i ][ j ] = dp[ i - 1 ][ j ] + g[ i ][ j ]

第二种是从左面来的礼物最大价值:dp[ i ][ j ] = dp[ i ][ j - 1 ] + g[ i ][ j ]

所以得出状态表达式:

dp[ i ][ j ] = max( dp[ i ][ j - 1 ],dp[ i - 1 ][ j ] ) + g[ i ][ j ]

3. 初始化

初始化的话,其实就是为了防止越界,

所以我们多创建一行和一列即可。

4. 填表顺序

从左往右,从上往下。

5. 返回值

根据题目要求,我们直接返回右下角的值就行。

3. 代码编写

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

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
6月前
【错题集-编程题】买卖股票的最好时机(一)(贪心 + 动态规划)
【错题集-编程题】买卖股票的最好时机(一)(贪心 + 动态规划)
动态规划|【路径问题】礼物的最大价值(LCR 166.珠宝的最高价值)
动态规划|【路径问题】礼物的最大价值(LCR 166.珠宝的最高价值)
|
6月前
|
测试技术 Windows
【动态规划】879. 盈利计划
【动态规划】879. 盈利计划
|
算法 C++
剑指offer(C++)-JZ47:礼物的最大价值(算法-动态规划)
剑指offer(C++)-JZ47:礼物的最大价值(算法-动态规划)
动态规划之剑指 Offer 47. 礼物的最大价值
动态规划之剑指 Offer 47. 礼物的最大价值
剑指offer 48. 礼物的最大价值
剑指offer 48. 礼物的最大价值
51 0
|
C++
剑指Offer - 面试题47:礼物的最大价值
剑指Offer - 面试题47:礼物的最大价值
80 0
动态规划:万变不离其宗,带你吃透股票系列问题
动态规划:万变不离其宗,带你吃透股票系列问题
|
存储 算法 决策智能
【刷题版】掌握算法的一揽子计划——动态规划总结
【刷题版】掌握算法的一揽子计划——动态规划总结