【动态规划专栏】专题二:路径问题--------3.礼物的最大价值

简介: 【动态规划专栏】专题二:路径问题--------3.礼物的最大价值


题目来源

本题来源为:

Leetcode LCR 166. 珠宝的最高价值

题目描述

现有一个记作二维矩阵 frame 的珠宝架,其中 frame[i][j] 为该位置珠宝的价值。拿取珠宝的规则为:

1.只能从架子的左上角开始拿珠宝

2.每次可以移动到右侧或下侧的相邻位置

3.到达珠宝架子的右下角时,停止拿取

注意:珠宝的价值都是大于 0 的。除非这个架子上没有任何珠宝,比如 frame = [[0]]。

题目解析

我们以这个示例来模拟一下:

算法原理

1.状态表示

经验+题目要求

对于本题而言就是:

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

2.状态转移方程

还是分两种情况:

因此状态方程为:

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

3.初始化

4.填表顺序

从上往下填每一行,每一行从左往右

5.返回值

返回dp[m][n];

代码实现

动态规划的代码基本就是固定的四步:

1.创建dp表
2.初始化
3.填表
4.返回值

本题完整代码实现:

class Solution 
{
public:
    int jewelleryValue(vector<vector<int>>& ob) 
    {
        //
        int m=ob.size(),n=ob[0].size();
        //创建dp表
        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])+ob[i-1][j-1];              
            }
        }
        return dp[m][n];
    }
};

时间复杂度:O(MN)
空间复杂度:O(M
N)

相关文章
|
6月前
|
算法
【动态规划专栏】专题二:路径问题--------6.地下城游戏
【动态规划专栏】专题二:路径问题--------6.地下城游戏
50 0
BUUCTF----飞机大战,解题思路
BUUCTF----飞机大战,解题思路
|
5月前
|
Java
技术经验分享:hdu3549初试最大流问题
技术经验分享:hdu3549初试最大流问题
19 0
动态规划|【路径问题】礼物的最大价值(LCR 166.珠宝的最高价值)
动态规划|【路径问题】礼物的最大价值(LCR 166.珠宝的最高价值)
|
6月前
|
算法
【优选算法专栏】专题一:双指针--------1.移动0
【优选算法专栏】专题一:双指针--------1.移动0
44 0
|
6月前
|
存储 索引
【冲击蓝桥篇】动态规划(下):你还在怕动态规划!?进来!答题模板+思路解析+真题实战
【冲击蓝桥篇】动态规划(下):你还在怕动态规划!?进来!答题模板+思路解析+真题实战
|
6月前
蓝桥备战--纪念品分组OJ532,贪心证明
蓝桥备战--纪念品分组OJ532,贪心证明
28 0
|
算法 Java Python
【算法模板】DFS秒杀模板—附练习题(阳光号启航)(一)
【算法模板】DFS秒杀模板—附练习题(阳光号启航)(一)
【算法模板】DFS秒杀模板—附练习题(阳光号启航)(一)
|
搜索推荐
蓝桥杯历年真题题解----2020年-- 排序
蓝桥杯历年真题题解----2020年-- 排序