心路历程:
这道题的建模和股票问题一样,只不过需要在状态上增加一个处于冻结期;
状态:1第i天;2第i天持有股票的状态(持有,不持有被冻结,不持有未被冻结)
动作:买入、卖出、不操作
返回值:当前状态下的收益
注意的点:
1、注意思考清楚所有的状态转移情况,当第i天处于持有状态时,第i-1天可能有两个状态:不持有不冻结or持有;
2、最后一天一定是手里不持有收益最大,所以是max(dp(n-1, 0), dp(n-1, 1))而不是max(dp(n-1, 0), dp(n-1, 1), dp(n-1, 2)).
解法:动态规划
class Solution:
def maxProfit(self, prices: List[int]) -> int:
@cache
def dp(i, j): # j = 0 1 2 : 不持有不冻结 不持有冻结 持有
if i == 0 and j == 0: return 0
elif i == 0 and j == 1