码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 309 最佳买卖股票时机含冷冻期 (动态规划)

时间:2019-06-22 10:47:44      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:分析   public   ++   四种   turn   class   vector   买卖   这一   

又是一道找到了状态转移方程,就可以迎刃而解的问题

但是状态转移方程不好找啊

分析题目:

每一天的四种状态:买进、卖出、冷冻期、什么都不做

每天的状态排列遵循:买...卖冷...买...卖冷...  其中...代表什么都不做的日子,可能有多个

因为有的日子什么都不做,没办法指明某一天到底进行了哪种操作,所以将状态定为“这一天及之前进行的最后操作”

第i天及以前,进行的最后操作为买进,所获得的最大收益:sell[i] 

类似地定义buy[i] ,cool[i]

状态转移方程:

sell[i]=buy[i-1]+price[i]
buy[i]=max(cool[i-1]-prices[i],buy[i])
cool[i]=max(sell[i-1],cool[i-1])

代码:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        if (len == 0)return 0;
        vector<int> sell(len), buy(len), cool(len);
        sell[0] = 0;
        buy[0] = -1*prices[0];
        cool[0] = 0;
        for (int i = 1;i < len;i++) {
            sell[i] = buy[i - 1] + prices[i];
            buy[i] = max(cool[i - 1] - prices[i], buy[i - 1]);
            cool[i] = max(sell[i - 1], cool[i - 1]);
        }
        int ans = max(sell[len-1], buy[len-1]);
        ans=max(ans,cool[len - 1]);
        return ans;
    }
};

 

Leetcode 309 最佳买卖股票时机含冷冻期 (动态规划)

标签:分析   public   ++   四种   turn   class   vector   买卖   这一   

原文地址:https://www.cnblogs.com/suuusu/p/11067697.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!