LeetCode309 最佳买卖股票时机含冷冻期
\(dp[i]\) 表示第 \(i\) 天结束之后所获得的最大收益
- \(dp[i][0]\) 表示第 \(i\) 天结束之后手中持有一张股票,该股票来源包括今天购买和昨天就持有
- \(dp[i][1]\) 表示第 \(i\) 天结束之后手中没有股票,且处于冷冻期,即今天卖出手中股票
- \(dp[i][1]\) 表示第 \(i\) 天结束之后手中没有股票,且不处于冷冻期,即昨天手中没有股票,且处于冷冻期或昨天也不处于冷冻期
class Solution:
def maxProfit(self, prices: List[int]) -> int:
l = len(prices)
if l == 0: return 0
dp = [[0] * 3 for i in range(l)]
dp[0][0] = -prices[0]
for i in range(1, l):
dp[i][0] = max(dp[i - 1][0], dp[i - 1][2] - prices[i])
dp[i][1] = dp[i - 1][0] + prices[i]
dp[i][2] = max(dp[i - 1][1], dp[i - 1][2])
return max(dp[l - 1][1], dp[l - 1][2])