这道题做起来的时候比较困难,有些地方不太容易想清楚。
首先应用DP的思路
DP[i][j] 表示 在前j天进行最多i次交易时的最大profits
这是容易考虑到,dp[i][j] = max(dp[i][j - 1] + * )
即相当于分厂两种状况,即第j天参与交易与第j天不参与交易。
若第j天不参与交易,则为dp第一项dp[i][j - 1]
若第j天参与交易,则应为第j天卖出了股票。
此时,不能够简单地直接应用dp[i - 1][j - 1] + diff,因为最佳的买入点未必是j - 1.
因此应该维护数组,buy, 记录当前状态是买入时的最大利润。
因此迭代公式为:
buy[i][j] = max(
dp[i][j] = max(dp[i][j - 1], buy[i][j] + prices[j])