123.买卖股票的最佳时机III
class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<int>dp(5, 0);
dp[1] = -prices[0];
dp[3] = -prices[0];
for(int i=1; i<prices.size(); i++)
{
if(prices[i]==prices[i-1]) continue;
dp[1] = max(dp[1], -prices[i]);
dp[2] = max(dp[2], dp[1]+prices[i]);
dp[3] = max(dp[3], dp[2]-prices[i]);
dp[4] = max(dp[4], dp[3]+prices[i]);
}
return dp[4];
}
};
188.买卖股票的最佳时机IV
class Solution {
public:
int maxProfit(int k, vector<int>& prices) {
vector<int> dp(2*k+1, 0);
for(int i=1; i<=2*k; i+=2){
dp[i] = -prices[0];
}
for(int i=1; i<prices.size(); i++){
if(prices[i]==prices[i-1]) continue;
for(int j=1; j<2*k+1; j++){
if(j%2==1) dp[j] = max(dp[j], dp[j-1]-prices[i]);
else dp[j] = max(dp[j], dp[j-1]+prices[i]);
}
}
return dp[2*k];
}
};