Python程序:计算摩天轮最大利润所需的最少旋转次数


假设有一个摩天轮,有四个座舱,每个座舱可容纳四名乘客。摩天轮逆时针旋转,每次旋转需要花费“run”金额。现在我们有一个数组“cust”,包含n个项目,每个项目i表示在第i次旋转前等待进入摩天轮的人数。为了登上摩天轮,每位顾客必须支付“board”金额,该金额用于摩天轮一次逆时针旋转。排队等待的人如果摩天轮有任何空位,则不应该等待。因此,给定数据,我们必须找出所需的最少旋转次数,以便利润最大化。

因此,如果输入类似于 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 := min(4, wt)

    • wt := wt - chg

    • tmp := tmp + chg * board - run

    • 如果 mst < tmp,则:

      • res := idx + 1

      • mst := tmp

  • x := wt / 4

  • y := wt % 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

更新于:2021年10月6日

127 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.