使用Python查找最小旋转次数以最大化摩天轮利润

使用Python查找最小旋转次数以最大化摩天轮利润

假设有一台四个小舱的摩天轮,每个小舱可以容纳四名乘客。摩天轮逆时针旋转,每旋转一次就会花费“run”金额。我们现在有一个数组“cust”,其中包含n个项,每个项i表示第i次旋转之前等待进入摩天轮的人数。每位顾客需要支付“board”一定的费用才能上车,而这笔费用就是旋转摩天轮的费用。如果有任何小舱可用的空座位,则排队等候的人不应该等待。因此,根据这些数据,我们必须找出所需的最小旋转次数,以便最大化利润。

使用Python查找最小旋转次数以最大化摩天轮利润

因此,如果输入为cust = [6, 4],board = 6,run = 4,则输出将为3。

首先,有6个人在排队等候。因此,首先有4个人进入第一个小舱,剩下的人等下一个小舱。

车轮旋转,第二个小舱到达。同时,又有4个人排队等候。因此,等待的下4个人进入下一个小舱。

车轮再次旋转,剩下的三位顾客进入下一个小舱。

因此,最少需要进行三次旋转才能为所有顾客服务。

从这些旋转中可以获得的最大利润是(10 * 6)-(3 * 4)= 48。

要解决这个问题,我们将遵循以下步骤:

  • res:= -1

  • mst:= 0

  • tmp:= 0

  • wt:= 0

  • 针对cust中的每个索引idx和值val,执行以下操作:

    • wt:= wt + val

    • chg:= (4,wt)的最小值

    • wt:= wt – chg

    • tmp:= tmp + chg * board – run

    • 如果mst < tmp,则

      • res:= idx + 1

      • mst:= tmp

  • x:=wt / 4

  • y:= wt mod 4

  • 如果4 * board > run,则

    • res:= res + x
  • 如果y * board > run,则
    • res:= res + 1
  • 返回res

示例

让我们看以下实现,以更好地理解

def solve(cust, board, run):
   res = -1
   mst = 0
   tmp = 0
   wt = 0
   for idx, val in enumerate(cust):
      wt += val
      chg = min(4, wt)
      wt -= chg
      tmp += chg * board - run
      if mst < tmp:
         res, mst = idx+1, tmp
   x, y = divmod(wt, 4)
   if 4 * board > run:
      res += x
   if y * board > run:
      res += 1
   return res

print(solve([6, 4], 6, 4))

输入

[6, 4],6,4 

输出

3 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程