题目描述:
卖出股票的第二天为冷冻期。
题解:动态规划
1.初始化dp = [[0]*3 for i in range(len(prices))],其中dp[i][0]表示第i天作为卖出的最大收益,dp[i][1]表示第i天作为买入的最大收益,dp[i][2]表示第i天作为冷冻的最大收益,其中dp[0][1]=-prices[0],相当于第0天以prices[0]买入。
2.对i从1到len(prices)-1,
dp[i][0]=max(dp[i-1][0], dp[i-1][1]+prices[i])即第i天作为卖出的最大收益=max(第i-1天作为卖出的收益,第i-1天买入+prices[i])
dp[i][1]=max(dp[i-1][1], dp[i-1][2]-prices[i])第i天作为买入的最大收益=max(第i-1天作为买入的收益,第i-1天为冷冻,第i天买入的收益)因为只有前一天为冷冻,该天才能进行买入操作。
dp[i][2]=max(dp[i-1][2], dp[i-1][0])第i天作为冷冻期的最大收益=max(第i-1天为冷冻期的最大收益,第i-1天卖出的收益)
3.返回dp[-1][0]
class Solution: def maxProfit(self, prices: List[int]) -> int: days = len(prices) dp = [[0]*3 for i in range(days)] dp[0][0] = 0#卖出 dp[0][1] = -prices[0]#买入 dp[0][2] = 0#冷冻 for i in range(1,days): dp[i][0] = max(dp[i-1][0],dp[i-1][1]+prices[i]) dp[i][1] = max(dp[i-1][1],dp[i-1][2]-prices[i]) dp[i][2] = max(dp[i-1][2],dp[i-1][0]) return dp[-1][0]