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