Skip to content

Latest commit

 

History

History
22 lines (14 loc) · 1.13 KB

index.md

File metadata and controls

22 lines (14 loc) · 1.13 KB

这题的思路和一般的动态规划有一点小区别,单独记录一下思路

每一天都只可能会出现三种情况的一种,买,卖,不买不卖,

我们用股票来描述我们可能出现的三种状态

  • 持股 当天买了股票,或者之前买了股票
  • 清仓 当天卖出股票叫做清仓
  • 空仓 当天没有买卖,并且没有持股

我们可以列出三个状态方程,最后一天时持股,清仓, 空仓,假设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) 的大小

第一天理论上只能出现空仓和持股的状态, 所以我们可以只从第二天再做对比

源码