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

Medium

思路

这道和之前做的动态规划题稍微有点不太一样,之前做的一些题题,有的两个状态就是横坐标和纵坐标,比如,不同路径

以上,尝试写一下代码,AC!

代码

python3

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
      if len(prices) is 0:
        return 0
      #三种状态
      #0:表示未持有股票状态
      #1:表示持有股票状态
      #2: 表示被冻结状态
      dp = [[-math.inf for _ in range(3)] for _ in range(len(prices))]
      dp[0][0] = 0
      dp[0][1] = -prices[0]
      dp[0][2] = 0
      for i in range(1,len(prices)):
        dp[i][0] = max(dp[i-1][0], dp[i-1][2])
        dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i])
        dp[i][2] = dp[i-1][1] + prices[i]
      return max(dp[-1])