309. 最佳买卖股票时机含冷冻期

思路

定义状态 状态转移 初始情况

实现

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])

优化

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容