【学会动态规划】按摩师(11)

简介: 【学会动态规划】按摩师(11)

动态规划怎么学?

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

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

1. 题目解析

题目链接: 面试题 17.16. 按摩师 - 力扣(Leetcode)

题目不难理解,就是不能选相邻的预约请求,。

最后算出最长的预约时长。

2. 算法原理

1. 状态表示

dp[ i ] 表示的是到这个位置的时候的最长预约时长,

但是实际上这里有两种情况,

1. 到了 i 位置选 i 此时的最长预约时长:我们称之为 f [ i ]

2. 到了 i 位置但是不选 i 此时的最长预约时长:我们称之为 g [ i ]

2. 状态转移方程

那这两种情况的状态转移方程是什么呢?

f [ i ] = g[ i - 1 ] + nums[ i ]

g[ i ] = max( f [ i - 1 ],g[ i - 1 ] )

3. 初始化

f [ 0 ] = nums[ 0 ] ,g [ 0 ] = 0

4. 填表顺序

从左往右。

5. 返回值

max( f [ n - 1 ],g[ n - 1 ] ),取最后一个位置的两种情况的最大值

3. 代码编写

class Solution {
public:
    int massage(vector<int>& nums) {
        int size = nums.size();
        if(size == 0) return 0;
        vector<int> f(size);
        auto g = f;
        f[0] = nums[0];
        for(int i = 1; i < size; i++) {
            f[i] = g[i - 1] + nums[i];
            g[i] = max(f[i - 1], g[i - 1]);
        }
        return max(f[size - 1], g[size - 1]);
    }
};

写在最后:

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

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

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

相关文章
|
7月前
|
C++ NoSQL 容器
动态规划二
动态规划二
|
7月前
动态规划1
动态规划1
40 0
动态规划1
|
存储
【动态规划】
【动态规划】
|
7月前
动态规划
动态规划
57 0
|
机器学习/深度学习 算法
动态规划详解
前段时间一直在做关于数据结构的题,也算是对数据结构有了一定的了解,知道了有些数据结构的基本算法。现在刚刚开始接触动态规划,其实写这篇文章的初衷是一来锻炼一下自己的总结能力,二来也是希望通过这篇文章,来指引和我一样的初学者,废话不多说了,开始吧。
60 0
|
定位技术
动态规划题:夺宝奇兵
动态规划题:夺宝奇兵
90 0
|
人工智能
动态规划的证明题
动态规划的证明题
112 0
|
算法 前端开发 JavaScript
理解动态规划
理解动态规划
理解动态规划
|
机器学习/深度学习
朝题夕解之动态规划(7)
朝题夕解之动态规划(7)
132 0
朝题夕解之动态规划(7)
朝题夕解之动态规划(2)
朝题夕解之动态规划(2)
119 0
朝题夕解之动态规划(2)