代码随想录:买卖股票的最佳时机III

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];
    }
};
posted @ 2025-02-25 20:36  huigugu  阅读(10)  评论(0)    收藏  举报