【学会动态规划】最佳买卖股票时机含冷冻期(15)

目录

动态规划怎么学?

[1. 题目解析](#1. 题目解析)

[2. 算法原理](#2. 算法原理)

[1. 状态表示](#1. 状态表示)

[2. 状态转移方程](#2. 状态转移方程)

[3. 初始化](#3. 初始化)

[4. 填表顺序](#4. 填表顺序)

[5. 返回值](#5. 返回值)

[3. 代码编写](#3. 代码编写)

写在最后:


动态规划怎么学?

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

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

1. 题目解析

题目链接:309. 最佳买卖股票时机含冷冻期 - 力扣(Leetcode)

这道题很好理解,其实就是买股票的时候多了一个冷冻期。

2. 算法原理

1. 状态表示

因为他有三种情况,所以我们也有三种状态表示:

dp i 0 表示第 i 天是 "买入" 状态,此时的最大利润。

dp i 1 表示第 i 天是 "可卖出" 状态,此时的最大利润。

dp i 2 表示第 i 天是 "冷冻" 状态,此时的最大利润。

2. 状态转移方程

我们一个一个分析状态表示:

首先是买入状态,怎么样让第 i 天进入买入状态?

如果 i - 1 天结束是买入状态(买过股票)那就已经是买入状态,

如果 i - 1 天结束是可交易状态(可以卖股票但没买)那只要这天买入,就可以进入买入状态,

如果 i - 1 天结束是冷冻状态(就是卖出的后一天)这样就不能进入买入状态。

然后是冷冻状态,怎么样让第 i 天进入冷冻状态?

如果 i - 1 天结束是买入状态,那只要这天卖出,就能进入冷冻状态,

如果 i - 1 天结束是可交易状态,那只要这天卖了,也能进入冷冻状态,

如果 i - 1 天结束是冷冻状态,那第 i 天结束不可能是冷冻状态,因为没东西可以卖了。

然后是可交易状态,怎么样让第 i 天进入可交易状态?

如果 i - 1 天结束是买入状态,那就不是可交易状态,而是买入状态。

如果 i - 1 天结束是可交易状态,那也只需要啥都不干就是可交易状态,

如果 i - 1 天结束是冷冻状态,那也只需要啥都不干就是可交易状态。

所以我们根据上面的分析来写状态转移方程:

dp i 0 = max( dp i - 1 0 ,dp i - 1 1 - p i )

dp i 1 = max( dp i - 1 1 ,dp i - 1 2 )

dp i 2 = dp i - 1 0 + p i

3. 初始化

我们只需要把 dp 0 0 初始化成 -p 0 即可,因为买入了所以最大利润就是一个负值。

4. 填表顺序

从左往右,依次填写三个表即可。

5. 返回值

其实就是:max( dp n - 1 1 ,dp n - 1 2 )

第一种买入的情况不考虑,因为都买入了,肯定不会是最大利润。

3. 代码编写

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n = prices.size();
        vector<vector<int>> dp(n, vector<int>(3));
        dp[0][0] = -prices[0];
        for(int i = 1; i < n; i++) {
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][2]);
            dp[i][2] = dp[i - 1][0] + prices[i];
        }
        return max(dp[n - 1][1], dp[n - 1][2]);
    }
};

写在最后:

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

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

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

相关推荐
Navigator_Z1 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy1 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
YangYang9YangYan3 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl23 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风3 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先
梦帮科技3 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
171320330计算机毕设编程4 小时前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
姜鱼问生5 小时前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构
不会就选b5 小时前
算法日常・每日刷题--<动态规划>23
算法·动态规划