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

分析
使用动态规划解决。
状态表示
由于有「买入」「可交易」「冷冻期」三个状态,因此我们可以选择用三个数组,其中:
- dp[i][0] 表示:第 i 天结束后,处于「买入」状态,此时的最大利润。
- dp[i][1] 表示:第 i 天结束后,处于「可交易」状态,此时的最大利润。
- dp[i][2] 表示:第 i 天结束后,处于「冷冻期」状态,此时的最大利润。
状态转移方程
- 处于买入状态的时候,我们现在有股票,此时不能买股票,只能继续持有股票,或者卖出股票;
- 处于卖出状态的时候:
- 如果在冷冻期,不能买入。
- 如果不在冷冻期,才能买入。
画出状态图

根据状态图可以得出:
买入->买入:什么都不干 买入->卖出:买入股票 对应代码:a[i]=max(a[i-1],c[i-1]-prices[i-1]);
卖出->卖出:什么都不干 卖出->冷冻期:卖出股票 对应代码:b[i]=max(b[i-1],a[i-1]+prices[i-1]);
冷冻期->冷冻期:什么都不干 冷冻期->买入:冷冻期结束 对应代码:c[i]=max(c[i-1],b[i-1]);
代码
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
vector<int> a(n + 1); // 买入
vector<int> b(n + 1);
;
a[] = -prices[];
( i = ; i <= n; i++) {
a[i] = (a[i - ], c[i - ] - prices[i - ]);
b[i] = (b[i - ], a[i - ] + prices[i - ]);
c[i] = (c[i - ], b[i - ]);
}
(b[n], c[n]);
}
};





