题目描述:
给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
示例 2:
提示:
1 <= prices.length <= 5000
 0 <= prices[i] <= 1000
解题思路图:
注意:该题需要好好理解状态转化,比一般的题较难一些
 
 AC代码:
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        dp = [0, 0, 0]
        n = len(prices)
        dp[0] = -prices[0]
        for i in range(1, n):
            pre_buy, pre_sell = dp[0], dp[1]
            
            # 买入状态:之前已买入 or 今天买入
            # 买入状态表示保证今天之后是股票已经买入
            dp[0] = max(dp[0], dp[2]-prices[i])
            # 卖出状态:之前已卖出 or 今天卖出
            # 卖出状态表示保证今天之后是股票已经卖出
            dp[1] = max(dp[1], pre_buy+prices[i])
            # 冷冻期状态:
            dp[2] = pre_sell
        return max(dp[1], dp[2])








