class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<vector<int>> dp =
vector<vector<int>>(prices.size(), vector<int>(4, 0));
// dp[i][0]表示这天持有股票手上的最大金额,dp[i][1]表示不持有,dp[i][2]表示持有第二支股票,dp[i][3]表示不持有第二支
dp[0][0] = -prices[0];
dp[0][1] = 0;
dp[0][2] = -prices[0];
dp[0][3] = 0;
for (int i = 1; i < prices.size(); i++) {
dp[i][0] = max(dp[i-1][0],-prices[i]);//前者为今天无作为,后者为今天刚买入
dp[i][1] = max(dp[i-1][1],prices[i]+dp[i-1][0]);//前者为无作为,后者为今天卖出
dp[i][2] = max(dp[i-1][2],dp[i-1][1]-prices[i]);
dp[i][3] = max(dp[i-1][3],prices[i]+dp[i-1][2]);
}
return dp[prices.size() - 1][3];
}
};