今天说一说这道题为什么分为四个状态而不是三个状态;
正确解题是把每天分为四个状态:
1) 买入状态(当天买入或者之前就买入)
2) 卖出状态(前两天就卖出)
3)今天卖出
4)冷冻状态
class Solution {
public:
int maxProfit(vector<int>& prices) {
int L = prices.size();
if(L==0) return 0;
vector<vector<int>> dp(L,vector(4,0));
dp[0][0] = -prices[0];
for(int i=1;i<L;i++)
{
dp[i][0] = max(dp[i-1][0],max(dp[i-1][3]-prices[i],dp[i-1][1]-prices[i]));
dp[i][1] = max(dp[i-1][3],dp[i-1][1]);
dp[i][2] = dp[i-1][0] + prices[i];
dp[i][3] = dp[i-1][2];
}
return max(dp[L-1][3],max(dp[L-1][2],dp[L-1][1]));
}
};
如果分成三个状态:
1)买入状态
2)卖出状态‘
3)冷冻状态
在买入状态时,分为昨天就买入;昨天为冷冻状态,当天买入;昨天就是卖出状态,今天买入,但是昨天的卖出状态到底是昨天卖出去的,还是昨天保持了卖出状态,如果昨天卖出,那么今天就是冷冻期,今天就不能买。所以分为三个状态的时候,就不能够清晰的表达清楚;