代码随想录训练营day42|188.买卖股票的最佳时机IV,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

188.买卖股票的最佳时机IV

变成了最多可以买卖k只股票

class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
        vector<vector<int>> dp(prices.size(),vector<int>(2*k+1,0));
        for(int i=1;i<2*k+1;i+=2){
            dp[0][i]=-prices[0];
        }
        //初始化,第k次买卖股票且持有股票的收益
        for(int i=1;i<prices.size();i++){
            //第i天第k笔持有的股票可以是第i-1天第k笔持有的股票得来的
            for(int j=1;j<2*k;j+=2){
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]-prices[i]);
                //第i天第j笔持有的股票的状态下最大利润,j表示还有股票
                dp[i][j+1]=max(dp[i-1][j+1],dp[i-1][j]+prices[i]);
                //第i天第j笔持有股票卖掉后(j+1是每股派的时候)
            }
        }
        int m=dp[prices.size()-1][2];
        for(int i=4;i<2*k+1;i+=2){
            m=max(m,dp[prices.size()-1][i]);
        }
        return m;
    }
};

309.最佳买卖股票时机含冷冻期

题目

本题总共对应 4种状态:

1.持有股票.2持股交易当天3.冷冻期。4.卖出股票后,买下一只股票前
在之前的题中,234被放到了一起,但本题有冷冻期所以要分开

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        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(max(dp[i-1][0],dp[i-1][2]-prices[i]),dp[i-1][3]-prices[i]);
            // 第i天持股,可以前一天是持股的,也可以前一天冷冻期,也可以前一天是冷冻期后但还没买入。
            dp[i][1]=prices[i]+dp[i-1][0];//卖出股票当天,前一天必须持股
            dp[i][2]=dp[i-1][1];//冷冻期,和前一天卖出去的一样
            dp[i][3]=max(dp[i-1][3],dp[i-1][2]);//冷冻期结束后的一天或i-1天已经是结束冷冻期了
        }
        
        return max(max(dp[prices.size()-1][1],dp[prices.size()-1][2]),dp[prices.size()-1][3]);
    }
};

在这里插入图片描述

714.买卖股票的最佳时机含手续费

 dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]-fee);
 dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]);

只用考虑减去手续费即可。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值