309.最佳买卖股票时机含冷冻期
首先一共有几种状态需要考虑
买入,卖出,处于冷冻期,买入后不动,卖出后不动,前一天卖出(今天处于冷冻期),冷冻期后买入,
将所有情况总结成4种情况
1.买入股票的状态(当天买入,买入后不动冷冻期后买入)dp[i][0]
2.卖出股票的状态
2(1):当天卖出 dp[i][1]
2(2):处于卖出的状态(在昨天/前天/更早之前已经卖出)dp[i][2]
3.冷冻期dp[i][3]
递推公式为:
dp[i][0]由dp[i-1][0]、dp[i-1][2]、dp[i-1][3]推导
dp[i][1]由dp[i-1][0]
dp[i][2]由dp[i-1][2],dp[i-1][0]
dp[i][3]由dp[i-1][1]
这里有个问题需要处理一下,如果是昨天卖出股票(处于卖出的状态)那么今天一定是处于冷冻期(dp[i][3]),今天是无法进入买入股票的状态的,也就是dp[i][0]不能根据dp[i-1][2]推导出来
对此我的理解是,昨天卖出今天冷冻这种卖出状态的特殊情况已经在dp[i][3]的推导中考虑到了,所以dp[i][0]的推导中不需要考虑这种情况
接下来是初始值的计算
dp[0][0]=-price[0],,dp[0][1]=0
关键是其他情况,卖出状态和冷冻期都是不可能在第一天就发生的,这种情况的初始值需要我们以推导后续结果正确的前提下单独设置
dp[1][0]可由dp[0][3]推导,在第一天冷冻第二天买入股票的情况下,要想推导正确,只能将dp[0][3]设置为0,dp[0][2]同理