力扣 309. 买卖股票的最佳时机含冷冻期

题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/

C++题解:动态规划

状态1:表示持有股票。更新为之前持有股票(dp[i-1][0])或者不持有股票且不处于冷冻期后买入(dp[i-1][2]-prices[i])。

状态2:表示不持有股票且处于冷冻期,即卖出。更新为持有股票后卖出(dp[i-1][0]+prices[i])。

状态3:表示不持有股票且不处于冷冻期,即保持之前已经持有股票的状态。更新为不持有股票的两个状态较大值(dp[i-1][1] 或 dp[i-1][2])。

返回值为状态2或状态3中的较大值。

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n = prices.size();
        if(n <= 1) return 0;
        // dp[i][0]表示持有股票,dp[i][1]表示不持有股票且处于冷冻期-即卖出,dp[i][2]表示不持有股票且不处于冷冻期,即保持之前已经持有股票的状态
        vector<vector<int>> dp(n, vector<int>(3, 0));
        dp[0][0] = -prices[0];
        for(int i = 1; i < n; i++){
            dp[i][0] = max(dp[i-1][0], dp[i-1][2]-prices[i]); cout<<dp[i][0]<<" ";
            dp[i][1] = dp[i-1][0] + prices[i]; cout<<dp[i][1]<<" ";
            dp[i][2] = max(dp[i-1][1], dp[i-1][2]); cout<<dp[i][2]<<" "<<i<<endl;
        }
        return max(dp[n-1][1], dp[n-1][2]);
    }
};
相关推荐
BestOrNothing_20156 分钟前
一篇搞懂 C++ 重载:函数重载 + 运算符重载,从入门到会用(含 ++、<<、== 实战)
c++·函数重载·运算符重载·operator·前置后置++·重载与重写
艾斯比的日常14 分钟前
Java 三色标记算法:并发垃圾回收的核心技术解析
java·开发语言·算法
2501_9411444224 分钟前
Python + C++ 异构微服务设计与优化
c++·python·微服务
CoovallyAIHub24 分钟前
抛弃LLM!MIT用纯视觉方法破解ARC难题,性能接近人类水平
深度学习·算法·计算机视觉
程序猿编码29 分钟前
PRINCE算法的密码生成器:原理与设计思路(C/C++代码实现)
c语言·网络·c++·算法·安全·prince
高洁0141 分钟前
具身智能-视觉语言导航(VLN)
深度学习·算法·aigc·transformer·知识图谱
Croa-vo1 小时前
TikTok 数据工程师三轮 VO 超详细面经:技术深挖 + 建模推导 + 压力测试全记录
javascript·数据结构·经验分享·算法·面试
蘑菇小白1 小时前
时间复杂度
数据结构·算法
czlczl200209251 小时前
算法:组合问题
算法·leetcode·职场和发展
CoderYanger1 小时前
优选算法-字符串:63.二进制求和
java·开发语言·算法·leetcode·职场和发展·1024程序员节