【学会动态规划】礼物的最大价值(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];      
    }
};

写在最后:

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

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

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

相关文章
|
9月前
|
算法 C++ Python
leetcode-122:买卖股票的最佳时机 II (贪心算法)
leetcode-122:买卖股票的最佳时机 II (贪心算法)
64 1
|
算法
代码随想录 Day27 贪心02上 LeetCode T122 买卖股票的最佳时机 II
代码随想录 Day27 贪心02上 LeetCode T122 买卖股票的最佳时机 II
42 0
|
9月前
|
测试技术 Windows
【动态规划】879. 盈利计划
【动态规划】879. 盈利计划
|
9月前
【每日一题Day140】剑指 Offer 47. 礼物的最大价值 | 动态规划 记忆化搜索
【每日一题Day140】剑指 Offer 47. 礼物的最大价值 | 动态规划 记忆化搜索
41 0
|
9月前
|
算法
六六力扣刷题贪心算法之基础和买卖股票的最佳时机
六六力扣刷题贪心算法之基础和买卖股票的最佳时机
76 0
|
算法 C++
剑指offer(C++)-JZ47:礼物的最大价值(算法-动态规划)
剑指offer(C++)-JZ47:礼物的最大价值(算法-动态规划)
|
算法
LeetCode150道面试经典题-买卖股票的最佳时机(简单)
数组 prices[]表示一个股市一段时间的价格,prices[i] 表示股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
96 0
动态规划之剑指 Offer 47. 礼物的最大价值
动态规划之剑指 Offer 47. 礼物的最大价值
剑指offer 48. 礼物的最大价值
剑指offer 48. 礼物的最大价值
60 0