Leet code 1599.经营摩天轮的最大利润

该问题是一个关于计算何时停止摩天轮运行以实现最大利润的策略问题。考虑到运行成本和顾客数量,你需要预知每个时刻的顾客数,并在适当时候切断电源。当等待的顾客超过4人时,会选择服务4人并收取费用,否则服务所有当前等待的顾客。通过模拟这一过程,找到最大利润的停止时刻。
摘要由CSDN通过智能技术生成

题目重述

 

 

 

题目解析

这个题目有点绕,不是很好理解,关键在于看示例,注意在你决定停止运行后,天上的人不用再管了,他们下来不花钱(不需要runningCost)

面向示例编程就好

这里引用一下@zhe的"有才"评论

题目太费解。我把它重新描述一下,为"最佳跑路时机"。 迪士尼把它的摩天轮游乐场卖给你了,约好明天付
款,今天你先试运行一下。但你其实没有那么多钱,今天必须跑路。 摩天轮不能停,从早上开门就必须一直按
固定的速率旋转。 电力公司不信任你,每旋转一格,电力公司就实时从你的账中划走一笔电费runningCost。 
你有未卜先知的能力,知道每个时刻,达到的顾客数目有多少。而且这些顾客都是死忠,坐不上摩天轮就不
走。 每个顾客在坐上去的同时,扫码转账给你boardingCost。 问:你什么时候拉闸跑路,钱最多?天上的顾
客等救援机构来了再说。。。

解题思路

        直接面向示例模拟就好,循环中每一步我们用时刻rotateCnt计录就行,用playedPeo记录已经玩过的人数之和,用一个curTolPeo记录当前已经到达但还没有玩过的人,循环的终止条件是已经到达最后的customers而且curTolPeo为0.(代表已经尝试过所有可能的更大值)......注意curTolPeo不是每一次都要增加的d

        在循环中的每一层判断curTolPeo等待人数是否超过4,如果超过: 

                curTolPeo-=4;
                playedPeo+=4;

                        否则 :curTolPeo置零;

                playedPeo+=curTolPeo;
                curTolPeo=0;

 代码如下:

        int curTolPeo=0,maxProfit=0;
        int playedPeo=0,ans;
        for(int rotateCnt=1;rotateCnt<=customers.size()||curTolPeo!=0;rotateCnt++){
            if(rotateCnt<=customers.size())  curTolPeo +=customers[rotateCnt-1];
            if(curTolPeo>4){
                curTolPeo-=4;
                playedPeo+=4;
            }else{
                playedPeo+=curTolPeo;
                curTolPeo=0;
            }
            int curTolProfit=playedPeo*boardingCost - rotateCnt*runningCost;
            if(curTolProfit>maxProfit) {ans=rotateCnt; maxProfit=curTolProfit;}
        }
        return maxProfit>0?ans:-1;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值