动态规划
class Solution:
def maxProfit(self, prices):
size = len(prices)
dp = [[[0] * 3 for _ in range(2)] for _ in range(size)]
dp[0][0][0] = 0
dp[0][0][1] = dp[0][0][2] = dp[0][1][1] = dp[0][1][2] = float('-inf')
dp[0][1][0] = -prices[0]
for i in range(1, size):
dp[i][0][0] = 0
dp[i][0][1] = max(dp[i - 1][1][0] + prices[i], dp[i - 1][0][1])
dp[i][0][2] = max(dp[i - 1][1][1] + prices[i], dp[i - 1][0][2])
dp[i][1][0] = max(dp[i - 1][0][0] - prices[i], dp[i - 1][1][0])
dp[i][1][1] = max(dp[i - 1][0][1] - prices[i], dp[i - 1][1][1])
dp[i][1][2] = float('-inf')
return max(dp[size - 1][0][1], dp[size - 1][0][2])
状态dp[i][j][k]表示当前状态能够盈利的最大值
i表示第i天,j表示当前是否持股(1是0否),k表示当前已卖出过股票次数