309.最佳买卖股票时机含冷冻期
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/
class Solution {
public:
int maxProfit(vector<int>& prices) {
if (prices.size() == 1) return 0;
// 0 : 未持有股票
// 1 : 持有股票
vector<vector<int>> dp(3, vector<int>(2, 0));
dp[0][0] = 0;
dp[0][1] = -prices[0];
dp[1][0] = max(dp[0][0], dp[0][1] + prices[1]);
dp[1][1] = max(dp[0][1], dp[0][0] - prices[1]);
dp[2][0] = dp[1][0];
dp[2][1] = dp[1][1];
for (int i = 2; i < prices.size(); i++) {
//第i天未持有股票:可能是昨天就未持有股票,可能是今天卖掉
dp[2][0] = max(dp[1][0], dp[1][1] + prices[i]);
//第i天持有股票: 可能是昨天就持有股票,可能是今天买了股票(前天未持有股票)
dp[2][1] = max(dp[1][1], dp[0][0] - prices[i]);
dp[0][0] = dp[1][0];
dp[1][0] = dp[2][0];
dp[0][1] = dp[1][1];
dp[1][1] = dp[2][1];
}
return dp.back()[0];
}
};
714.买卖股票的最佳时机含手续费
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
//0 未持有股票
//1 持有股票
vector<vector<int>> dp(2, vector<int>(2, 0));
dp[0][1] = -prices[0];
for (int i = 1; i < prices.size(); i++) {
dp[1][0] = max(dp[0][0], dp[0][1] + prices[i] - fee);
dp[1][1] = max(dp[0][1], dp[0][0] - prices[i]);
dp[0][0] = dp[1][0];
dp[0][1] = dp[1][1];
}
return dp.front().front();
}
};