模版题-动态规划-买卖股票的最佳时机III ( 多状态 )

管理员
```python class Solution: # 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 # 设计一个算法来计算你所能获取的最大利润。最多可以完成两笔交易。 # 注意:不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)。 def maxProfit(self, prices: List[int]) -> int: # 状态: # 0: 第1次没有股票 # 1: 第1次持有股票 # 2: 第2次没有股票 # 3: 第2次持有股票 # dp[ i ][ x ]表示第i天状态为x的最大利润 n = len( prices ) dp = [ [ 0, 0, 0, 0 ] for _ in range( n ) ] dp[ 0 ][ 0 ] = 0 dp[ 0 ][ 1 ] = -prices[ 0 ] dp[ 0 ][ 2 ] = 0 dp[ 0 ][ 3 ] = -prices[ 0 ] # 可以理解为 买入->卖出->又买入 for i in range( 1, n ): # 第1次没有股票: 原先是第1次没有股票 or 第1次持有后卖出 dp[ i ][ 0 ] = max( dp[ i - 1 ][ 0 ], dp[ i - 1 ][ 1 ] + prices[ i ] ) # 第1次持有股票: 原先是第1次持有股票 or 第1次买入 dp[ i ][ 1 ] = max( dp[ i - 1 ][ 1 ], - prices[ i ] ) # 第2次没有股票: 原先是第2次没有股票 or 第2次持有后卖出 dp[ i ][ 2 ] = max( dp[ i - 1 ][ 2 ], dp[ i - 1 ][ 3 ] + prices[ i ] ) # 第2次持有股票: 原先是第2次持有股票 or 第1次没有股票后买入 dp[ i ][ 3 ] = max( dp[ i - 1 ][ 3 ], dp[ i - 1 ][ 0 ] - prices[ i ] ) return dp[ n - 1 ][ 2 ] ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧