模版题-动态规划-买卖股票的最佳时机IV ( 多状态 多维数组简化 )
```python
class Solution:
# 一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。
# 设计一个算法来计算所能获取的最大利润。最多可以完成 k 笔交易。也就是说,最多可以买 k 次,卖 k 次。
# 注意:不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)。
def maxProfit(self, k: int, prices: List[int]) -> int:
# 同 '买卖股票的最佳时机III' —— 多状态
n = len( prices )
if n == 0 or k == 0: return 0
# dp[ i ][ j ][ 0, 1 ] 第i天时,已完成j笔交易,且未持有或持有股票的最大利润
dp = [ [ [ 0, 0 ] for _ in range( k + 1 ) ] for _ in range( n ) ]
# 初始值
for i in range( 1, k + 1 ):
# 理解为同一天买入->买出 ...
dp[ 0 ][ i ][ 0 ] = 0
dp[ 0 ][ i ][ 1 ] = -prices[ 0 ]
for i in range( 1, n ):
for j in range( 1, k + 1 ):
# 第i天 第j次 未持有的最大利润
dp[ i ][ j ][ 0 ] = max( dp[ i - 1 ][ j ][ 0 ], dp[ i - 1 ][ j ][ 1 ] + prices[ i ] )
# 第i天 第j次 持有的最大利润
dp[ i ][ j ][ 1 ] = max( dp[ i - 1 ][ j ][ 1 ], dp[ i - 1 ][ j - 1 ][ 0 ] - prices[ i ] )
return dp[ n - 1 ][ k ][ 0 ]
```