leetcode股票问题

动态规划的思想,遍历所有可能的情况

题目条件:天数n,交易次数k,持有股票情况0/1

maxProfit(vector<int> &prices, int k)
{
    int n = prices.size();
    //n天,交易k次,持有/不持有股票
    int dp[n][k+1][2] = {0};
    for(int i=0;i<=n;++i)
    {
        for(int j=k;j>=1;j--)
        {
            //单独处理的case
            if(i-1==0)
            {
                //第一天不持有股票,所以利润为0
                dp[i][j][0] = 0;
                //第一天购买了股票,利润为负数,扣除成本
                dp[i][j][-1] = -prices[0];
                continue;
            }
            //第i天持有股票和不持有股票最大利润
            //重点,dp[i-1][j][1]+prices[i]这里,只能在买入的时候进行标记
            dp[i][j][0] = max(dp[i-1][j][0], dp[i-1][j][1]+prices[i]);  //不持有分两种情况,昨天不持有和第i天卖掉
            dp[i][j][1] = max(dp[i-1][j-1][0]-prices[i], dp[i-1][j][1]); //持有分两种情况,昨天持有和昨天买入
        }
    }
    //最大利润为最后一天,手中不持有股票
    return dp[n-1][k][0];
}
全部评论

相关推荐

面了100年面试不知...:今年白菜这么多,冬天可以狂吃了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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