思路
定義狀態(tài) 狀態(tài)轉(zhuǎn)移 初始情況
實(shí)現(xiàn)
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 先想想狀態(tài)的轉(zhuǎn)移 買(mǎi)入->賣(mài)出 賣(mài)出->冷凍->買(mǎi)入 買(mǎi)入->持有->賣(mài)出
# 定義狀態(tài) dp[i][k] = p 第i天的狀態(tài)為k時(shí)最大的利潤(rùn)p
# k=0 為買(mǎi)入且持有 k=1為賣(mài)出 k=2為沒(méi)有股票 k=3為冷凍
# 轉(zhuǎn)移 dp[i][0] = max(dp[i-2][1],dp[i-1][3],dp[i-1][2]) dp[i][1]=max(dp[i-1][0],dp[i-1][2])
# dp[i][2] = max(dp[i-1][1],dp[i-1][2]) dp[i][3] = dp[i-1][1]
p_len =len(prices)
if not p_len: # 沒(méi)有天
return 0
if p_len==1: # 只有一天
return 0
# 大于等于倆天
dp = [[0]*4 for _ in range(p_len)]
# 初始態(tài) 第一天肯定除了買(mǎi)入都是0 第二天 如果可以把第一天的賣(mài)出 有賺錢(qián)就更新一下?tīng)顟B(tài)1的值
dp[0][0] = -prices[0]
for i in range(1,p_len):
dp[i][0] = max(dp[i-1][3]-prices[i],dp[i-1][2]-prices[i],dp[i-1][0])
dp[i][1] = dp[i-1][0]+prices[i]
dp[i][2] = max(dp[i-1][1],dp[i-1][2])
dp[i][3] = dp[i-1][1]
print(dp)
return max(dp[p_len-1][0],dp[p_len-1][1],dp[p_len-1][2],dp[p_len-1][3])