dp[i][k][0]=max(dp[i-1][k][0],dp[i-1][k][1]+price[i])
dp[i][k][1]=max(dp[i-1][k][1],dp[i-1][k-1][0]-price[i])
由于k是无穷大,可以将k简化掉
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+price[i])
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-price[i])
又由于冷冻期的原因,只能在卖掉股票的两天后买股票
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+price[i])
dp[i][1]=max(dp[i-1][1],dp[i-2][0]-price[i])
显然i
只与i-1
、i-2
有关,可以进一步简化
int maxProfit(vector<int>& prices) {
int dp0 = 0, dp1 = INT_MIN;
int dp0_pre = 0;
for(int i=0;i<prices.size();++i){
int tmp = dp0;
dp0 = max(dp0,dp1+prices[i]);
dp1 = max(dp1,dp0_pre-prices[i]);
dp0_pre = tmp;
}
return dp0;
}