class Solution:
def maxProfit(self, k: int, prices: List[int]) -> int:
n = len(prices)
#dp[i][j][0]第i天第j次持有;dp[i][j][1]第i天第j次不持有(i:0->n-1)(k:1->k)
dp = [[[0]*2 for _ in range(k+1)] for _ in range(n)]
for j in range(1,k+1):
dp[0][j][0] = -prices[0]
#先遍历天数,再遍历次数
for i in range(1,n):
for j in range(1,k+1):
#前一天就已经第k次持有,前一天第k-1次不持有
dp[i][j][0] = max(dp[i-1][j][0],dp[i-1][j-1][1]-prices[i])
#前一天第k次不持有,前一天第k次持有
dp[i][j][1] = max(dp[i-1][j][1],dp[i-1][j][0]+prices[i])
return dp[n-1][k][1]
188. 买卖股票的最佳时机 IV
最新推荐文章于 2024-10-20 10:43:07 发布
该文章介绍了一种使用动态规划方法解决投资问题的Python函数,针对给定价格列表,计算在最多进行k次买卖操作后获得的最大利润。函数`maxProfit`涉及状态转移方程,适用于股票交易策略分析。
摘要由CSDN通过智能技术生成