力扣 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]);
    }
};
相关推荐
宁静致远20211 小时前
【C++设计模式】第五篇:装饰器模式
c++·设计模式·装饰器模式
青草地溪水旁1 小时前
Linux 高性能 I/O 事件通知机制的核心系统调用—— `epoll_ctl`
linux·c语言·c++
孙同学_1 小时前
【C++】AVL树
c++·redis
行走的bug...2 小时前
用图论来解决问题
算法·图论
君宝2 小时前
Linux ALSA架构:PCM_OPEN流程 (二)
java·linux·c++
island13142 小时前
【C++框架#5】Elasticsearch 安装和使用
开发语言·c++·elasticsearch
岁忧3 小时前
(LeetCode 每日一题) 3541. 找到频率最高的元音和辅音 (哈希表)
java·c++·算法·leetcode·go·散列表
pusue_the_sun3 小时前
每日算法题推送
算法·双指针
KyollBM3 小时前
【Luogu】P9809 [SHOI2006] 作业 Homework (根号算法)
算法
小六子成长记3 小时前
【C++】:list容器全面解析(超详细)
c++·windows·list