题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/
C++题解:动态规划
状态1:表示持有股票。更新为之前持有股票(dp[i-1][0])或者不持有股票且不处于冷冻期后买入(dp[i-1][2]-prices[i])。
状态2:表示不持有股票且处于冷冻期,即卖出。更新为持有股票后卖出(dp[i-1][0]+prices[i])。
状态3:表示不持有股票且不处于冷冻期,即保持之前已经持有股票的状态。更新为不持有股票的两个状态较大值(dp[i-1][1] 或 dp[i-1][2])。文章来源:https://www.toymoban.com/news/detail-834625.html
返回值为状态2或状态3中的较大值。文章来源地址https://www.toymoban.com/news/detail-834625.html
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if(n <= 1) return 0;
// dp[i][0]表示持有股票,dp[i][1]表示不持有股票且处于冷冻期-即卖出,dp[i][2]表示不持有股票且不处于冷冻期,即保持之前已经持有股票的状态
vector<vector<int>> dp(n, vector<int>(3, 0));
dp[0][0] = -prices[0];
for(int i = 1; i < n; i++){
dp[i][0] = max(dp[i-1][0], dp[i-1][2]-prices[i]); cout<<dp[i][0]<<" ";
dp[i][1] = dp[i-1][0] + prices[i]; cout<<dp[i][1]<<" ";
dp[i][2] = max(dp[i-1][1], dp[i-1][2]); cout<<dp[i][2]<<" "<<i<<endl;
}
return max(dp[n-1][1], dp[n-1][2]);
}
};
到了这里,关于力扣 309. 买卖股票的最佳时机含冷冻期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!