这题的思路和一般的动态规划有一点小区别,单独记录一下思路
每一天都只可能会出现三种情况的一种,买,卖,不买不卖,
我们用股票来描述我们可能出现的三种状态
- 持股 当天买了股票,或者之前买了股票
- 清仓 当天卖出股票叫做清仓
- 空仓 当天没有买卖,并且没有持股
我们可以列出三个状态方程,最后一天时持股,清仓, 空仓,假设dp1(i),dp2(i),dp3(i),分别为第i天在三种状态下的最优解
- 最后一天为持股时, 前一天必须是持股或者空仓的状态 dp1(i) = Max(dp1(i - 1), dp3(i - 1) - price[i])
- 最后一天清仓时,则前一天必须持股,dp2(i) = dp1(i - 1) + price(i)
- 最后一天空仓时,则前一天必须是空仓或者清仓, dp3(i) = Max(dp3(i - 1), dp2(i - 1))
因为要使最后一天时利润最大,所以最后一天一定不会买入,那么最后一天一定是清仓或者空仓的状态, 所以我们最终只需要比较dp2(i) 和 dp3(i) 的大小
第一天理论上只能出现空仓和持股的状态, 所以我们可以只从第二天再做对比