力扣 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]);
    }
};
相关推荐
txinyu的博客5 分钟前
结合游戏场景理解,互斥锁,读写锁,自旋锁,CAS / 原子变量,分段锁
开发语言·c++·游戏
Rui_Freely7 分钟前
Vins-Fusion之 SFM准备篇(十二)
人工智能·算法·计算机视觉
hugerat10 分钟前
在AI的帮助下,用C++构造微型http server
linux·c++·人工智能·http·嵌入式·嵌入式linux
-森屿安年-15 分钟前
unordered_map 和 unordered_set 的实现
数据结构·c++·散列表
yyy(十一月限定版)26 分钟前
matlab矩阵的操作
算法·matlab·矩阵
九久。35 分钟前
手动实现std:iterator/std:string/std::vector/std::list/std::map/std:set
c++·stl
小羊羊Python37 分钟前
Sound Maze - 基于 SFML+C++14 的音效迷宫开源游戏 | MIT 协议
c++·游戏·开源
努力学算法的蒟蒻43 分钟前
day58(1.9)——leetcode面试经典150
算法·leetcode·面试
txinyu的博客1 小时前
HTTP服务实现用户级窗口限流
开发语言·c++·分布式·网络协议·http
代码村新手1 小时前
C++-类和对象(上)
开发语言·c++