0
点赞
收藏
分享

微信扫一扫

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

90哦吼 2022-03-30 阅读 58

题目描述:

分析:

这道题还是要比那道有冷静期的要简单。。。 

设立dp[n][2]来存储状态:

那么如何进行状态转移呢?

第i天结束,手里没有股票,有两种情况:

        1.i-1天手里也没有股票

        2.i-1天手里有股票,但是第i天卖出了

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

第i天结束,手里有股票,有两种情况:

        1.i-1天手里也有股票

        2.i-1天手里没有股票,但是第i天买入了

因此,dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]);

代码如下:

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        // dp[i][0]代表第i天结束时,手里没有股票,所累积的最大利润
        // dp[i][1]代表第i天结束时,手里有一只股票,所累积的最大利润
        int dp[50005][2];
        int len=prices.size();
        dp[0][0]=0;
        dp[0][1]=-prices[0];
        for(int i=1;i<len;i++)
        {
            // 第i天结束,手里没有股票,有两种情况:
                // 1.i-1天手里也没有股票
                // 2.i-1天手里有股票,但是第i天卖出了
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]-fee);
            // 第i天结束,手里有股票,有两种情况:
                // 1.i-1天手里也有股票
                // 2.i-1天手里没有股票,但是第i天买入了
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]);
        }
        // 返回最后一天结束时,所累积的最大利润
        return max(dp[len-1][0],dp[len-1][1]);

    }
};
举报

相关推荐

0 条评论