最佳买卖股票时机含冷冻期

题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/

题目描述:

题解:
非状态机的DP讲解题解

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //dp[i][0]:第i天手上不持有股票的最大收益
        //dp[i][1]:第i天手上持有股票的最大收益
        //dp[i][2]:第i天卖出了股票导致手上不持有股票的最大收益
        vector<vector<int>> dp(prices.size(), vector<int>(3, 0));
        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        dp[0][2] = 0;
        for(int i = 1; i < prices.size(); i++)
        {
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][2]);     //第i天不持股的两种情况:1.第i-1天不持股。2.第i-1天卖出了股票,第i天为冷冻期
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);        //第i天持股的两种情况:1.第i- 1天持股。2.第i天买入股票(第i-1天一定不持股且当天未卖股票)
            dp[i][2] = dp[i - 1][1] + prices[i];       //第i天卖出股票导致手上不持股,则第i-1天手上一定持股
        }
        //最后一天的最大收益有两种可能,而且一定是“不持有”状态下的两种可能。
        return max(dp[prices.size() - 1][0], dp[prices.size() - 1][2]);
    }
};

原文地址:https://www.cnblogs.com/ZigHello/p/15218976.html