股票最佳买卖时机动态规划_309最佳股票买卖时机含冷冻期

from typing import List

# 用动态规划的写法来写题。

# 每一天都有五种情况发生,

#1,今天买入,2,今天卖出,3今天是冷冻期,4,今天不买入也不卖出(没有持有股票)5,今天不买入也不卖出(持有股票)

class Solution:

def maxProfit(self, prices: List[int]) -> int:

# 当天数小于二时,无法进行买卖交易,因此直接返回零

if len(prices) <= 1:return 0

# 定义列表表示状态方程

dp = [[0,0,0,0,0] for _ in range(len(prices)) ]

# 定义初始值的状态

# 今天买入的利润为负值

dp[0][0] = -prices[0]

# 第一天不可能卖出

dp[0][1] = float("-inf")

# 第一天不可能处于冷冻期

dp[0][2] = float("-inf")

# 不进行交易利润为零

dp[0][3] = 0

# 第一天不可能持有股票,同时不交易

dp[0][4] = float("-inf")

# 进行遍历

for index in range(1,len(prices)):

# 今天买入,昨天可能是冷冻期,或者没有交易

dp[index][0] = max(dp[index - 1][3],dp[index - 1][2]) - prices[index]

# 今天卖出,可能是昨天买入的,也可能是昨天已经持有但没有交易

dp[index][1] = max(dp[index - 1][0],dp[index - 1][4]) + prices[index]

# 今天为冷冻期代表昨天卖出

dp[index][2] = dp[index - 1][1]

#今天不交易,昨天可能是冷冻期,或者昨天就不交易

dp[index][3] = max(dp[index -1][3],dp[index - 1][2])

# 今天不交易(但持有股票),可能是昨天就没有交易同时持有股票,也可能是昨天刚买的股票。

dp[index][4] = max(dp[index - 1][4],dp[index - 1][0])

return max(dp[-1])

A = Solution()

print(A.maxProfit([1,2,3,0,2]))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值