day42

继续完成了买卖股票的题(最多交易k次、冷冻期、手续费)
最多交易k次:
//动态规划,最多只能买卖k次--分情况考虑(奇数持有,偶数卖出)
        //dp[i][j]:i为第几天,j为状态,奇数时是持有,偶数时是不持有
        //递推公式:
        //dp[i][j+1] = max(dp[i-1][j+1], dp[i-1][j] - prices[i]);//今天之前就持有了或者今天才买入
        //dp[i][j+2] = max(dp[i-1][j+2], dp[i-1][j+1] + prices[i]);//昨天就不持有或者今天才卖出
        //初始化:第0天的所有状态都要初始化,偶数为0,奇数为-prices[0];
        //遍历顺序:外层遍历天数i,内层遍历j状态.
        
        if(prices.size() == 0) return 0;
        vector<vector<int>> dp(prices.size(), vector<int>(2*k+1, 0));
        for(int j = 1; j < 2*k; j+=2)//更新奇数情况下第0天的值
        {
            dp[0][j] = -prices[0];
        }
        for(int i = 1; i < prices.size(); i++)
        {
            for(int j = 0; j < 2*k-1; j+=2)
            {
                dp[i][j+1] = max(dp[i-1][j+1], dp[i-1][j] - prices[i]);
                dp[i][j+2] = max(dp[i-1][j+2], dp[i-1][j+1] + prices[i]);
            }
        }
        return dp[prices.size() - 1][2*k];

冷冻期:
//动态规划--不限交易次数,但有冷冻期,即卖出的第二天不能操作
        //分情况考虑--持有、不持有、冷冻期
        //递推公式:
        //持有:昨天已持有、今天买昨天之前就卖了、今天买昨天冷冻期
        //dp[i][0] = max(dp[i-1][0], dp[i-1][1] - prices[i], dp[i-1][3] + prices[i]);
        //不持有:保持卖出状态(前一天就是保持卖出状态,或者前一天是冷冻期)
        //dp[i][1] = max(dp[i-1][1], dp[i-1][3]);
        //不持有:今天卖
        //dp[i][2] = dp[i-1][0] + prices[i];
        //冷冻期:昨天卖
        //dp[i][3] = dp[i-1][2];

        //初始化:第0天全初始化为0

        if(prices.size() == 0) return 0;
        vector<vector<int>> dp(prices.size(), vector<int>(4, 0));
        dp[0][0] = -prices[0]; // 持股票
        for(int i = 1; i < prices.size(); i++)
        {
            dp[i][0] = max(dp[i-1][0], max(dp[i-1][1] - prices[i], dp[i-1][3] - prices[i]));
            dp[i][1] = max(dp[i-1][1], dp[i-1][3]);
            dp[i][2] = dp[i-1][0] + prices[i];
            dp[i][3] = dp[i-1][2];
        }
        return max(dp[prices.size() - 1][1], max(dp[prices.size() - 1][2], dp[prices.size() - 1][3]));

手续费:简单,在卖出时再减去手续费就行。
全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务