leetcode 309. 最佳买卖股票时机含冷冻期 medium
题目描述:
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
解题思路:
每次 sell 之后要等一天才能继续交易。只要把这个特点融入dp的状态转移方程即可:
dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i])
dp[i][1] = max(dp[i-1][1], dp[i-2][0] - prices[i])
解释:第 i 天选择 buy 的时候,要从 i-2 的状态转移,而不是 i-1 。
代码:
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()<2)
return 0;
int dp_0=0,dp_1=INT_MIN, dp_pre_0=0;
int temp;
for(int price:prices){
temp=dp_0; // 设置个变量保存原来的dp_0
dp_0=max(dp_0,dp_1+price);
dp_1=max(dp_1,dp_pre_0-price);
dp_pre_0=temp;
}
return dp_0;
}
};