Best Time to Buy and Sell Stock with Cooldown

题目来源
一道DP题,但是想不到怎么进行DP。
我一开始的想法是先从前往后遍历,不管条件限制把最优情况先求出来,然后再遍历,扣掉不满足条件的部分。
代码如下:

class Solution {
public:
    int maxProfit(vector& prices) {
        int n = prices.size(), res = 0;
        for (int i=1; i prices[i-1])
                res += prices[i] - prices[i-1];
        for (int i=3; i prices[i-1] && prices[i-1] < prices[i-2] && prices[i-2] > prices[i-3])
                res -= min(prices[i]-prices[i-1], prices[i-2]-prices[i-3]);
        return res;
    }
};

答案是错的,我没有考虑这种情况,[6,1,3,2,4,7],直接买1卖7比较合算。
然后我想着要不记录下每个上升的头尾,然后进行处理。
然后我就放弃了。直接看讨论区。
然后我又被大神们折服了。
分为sell,buy,rest三种进行讨论,然后根据实际情况进行简化。
具体看讨论区。
代码如下:

class Solution {
public:
    int maxProfit(vector& prices) {
        int sell(0), buy(INT_MIN), prev_sell(0), prev_buy;
        for (int price : prices) {
            prev_buy = buy;
            buy = max(prev_sell-price, buy);
            prev_sell = sell;
            sell = max(prev_buy+price, sell);
        }
        return sell;
    }
};

你可能感兴趣的:(Best Time to Buy and Sell Stock with Cooldown)