从现金的角度思考,买,代表现金减少,卖代表现金增加。题目是求最后的最大现金值。
引入冷冻期后,第i天收盘后,所处的可能状态会增加,因为要考虑是否是冷冻期。
f[i][0] 表示第i天收盘后,持有股票时的最大收益。 根据情况,这个持有的股票可以来自前一天的结果,即f[i-1][0],也可以来自当天买入。 要能当天买入,则前一天应该是无股且不处于冷冻期的状态,即:f[i-1][2] - prices[i]。
f[i][0] = max(f[i-1][0], f[i-1][2] - prices[i])
f[i][1] 表示第i天收盘后,处于无股且处于冷冻期的最大收益。处于冷冻期,说明当天肯定是卖股了。 那么前一天肯定是持有股票的状态。即:
f[i][1] = f[i-1][0] + prices[i]
f[i][2] 表示第i天收盘后,处于无股且不处于冷冻期的状态的最大收益。不处于冷冻期,说明当天没有卖股,当天没卖股,还处于无股状态,只能说明前一天也是无股的,这又分为无股处于冷冻期和无股不处于冷冻期两种情况。
f[i][2] = max(f[i-1][1], f[i-1][2])