使用dp[i][k][0/1]
表示状态(第i天,最多能交易几次,是否持有股票)。
那么
dp[i][k][0]=max(dp[i-1][k][0],dp[i-1][k][1]+price[i])
表示前一天没有持有股票,或者持有股票但是卖了
dp[i][k][1]=max(dp[i-1][k][1],dp[i-1][k-1][0]-price[i])
表示前一天持有股票,或者没有持有股票但是买了
当k=1,或者无穷大时,k可以简化
21. 买卖股票的最佳时机/C++(1次交易)
122. 买卖股票的最佳时机 II/C++(无限次交易,凑数,该题用贪心算法)
123. 买卖股票的最佳时机 III/C++(2次交易)
188. 买卖股票的最佳时机 IV/C++(最复杂,k次交易)
309. 最佳买卖股票时机含冷冻期/C++
714. 买卖股票的最佳时机含手续费/C++