309.最佳买卖股票时机含冷冻期
直接看答案。
我再复述一遍这个卖出状态,这个是最容易混的。
买-卖-冷-卖-买-卖
一是你在买入后卖出的状态,无冷冻期。设为dp(i)(1)。
二是你在卖出后,经历了冷冻期后的卖出状态。这是延续之前的卖出状态,相当于没进行操作。但由于dp要对前一天迭代,设为dp(i)(2)。
dp(i)(2)=max(dp(i-1)(3),dp(i-1)(2));
这个递推式我确实没想到。。
class Solution {
public:
int maxProfit(vector
& prices) { int n=prices.size();
if(n==0)
return 0;
vector
>dp(n,vector (4,0)); dp[0][0]=-prices[0];
dp[0][1]=dp[0][2]=dp[0][3]=0;
for(int i=1;i
dp[i][0]=max(dp[i-1][0],max(dp[i-1][3]-prices[i],dp[i-1][2]-prices[i]));
dp[i][1]=dp[i-1][0]+prices[i];
dp[i][2]=max(dp[i-1][2],dp[i-1][3]);
dp[i][3]=dp[i-1][1];
}
return max(dp[n-1][3],max(dp[n-1][1],dp[n-1][2]));
}
};
714.买卖股票的最佳时机含手续费
这题其实没啥好说的,就是在卖出的时候利润减个手续费,最后的利润要想最大必然处于卖出状态(未持有股票状态)。