思路
定义状态 状态转移 初始情况
实现
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 先想想状态的转移 买入->卖出 卖出->冷冻->买入 买入->持有->卖出
# 定义状态 dp[i][k] = p 第i天的状态为k时最大的利润p
# k=0 为买入且持有 k=1为卖出 k=2为没有股票 k=3为冷冻
# 转移 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: # 没有天
return 0
if p_len==1: # 只有一天
return 0
# 大于等于俩天
dp = [[0]*4 for _ in range(p_len)]
# 初始态 第一天肯定除了买入都是0 第二天 如果可以把第一天的卖出 有赚钱就更新一下状态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])