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]))
相關文章
相關標籤/搜索