冷冻期算单独一种情况:1.今天持有(已有or今天买)2.已经卖出3.今天卖出4.冷冻期
在最后一天的所有卖出状态中找最大值,包括冷冻期
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n=len(prices)
if n<2:return 0
dp=[[0]*4 for _ in range(n)]
dp[0][0]=-prices[0]
for i in range(1,n):
dp[i][0]=max(dp[i-1][0],max(dp[i-1][3],dp[i-1][1])-prices[i])
dp[i][1]=max(dp[i-1][1],dp[i-1][3])
dp[i][2]=dp[i-1][0]+prices[i]
dp[i][3]=dp[i-1][2]
return max(dp[-1][1],dp[-1][2],dp[-1][3])
和之前的做法一样 只是减了个fee 这样要求maxdp[-1]
class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:
n=len(prices)
dp=[[0]*2 for _ in range(n)]
dp[0][0]=-prices[0]
for i in range(1,n):
dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i])
dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]-fee)
return max(dp[-1])
总结:
感觉都是列个表格 每天的所有状态列出来 然后根据头一天去推算
基本掌握那个k次交易 和 冷冻期 就掌握特殊情况了