通过在 Python 中销售价值递减的彩色球来寻找最大利润的程序

假设我们有一个名为inventory 的数组,其中inventory[i] 表示我们最初拥有的第i 种颜色的球的数量。我们还有一个叫做 orders 的值,它表示客户想要的球总数。我们可以按任何顺序出售球。在我们的库存中有不同颜色的球,客户想要任何颜色的球。现在球的价值在本质上是特殊的。每个彩色球的价值是我们库存中该颜色球的数量。因此,如果我们目前有 6 个蓝球,客户将为第一个蓝球支付 6。那么只剩下 5 个蓝球了,所以下一个蓝球的价值为 5。我们必须找到卖掉订单彩色球后可以获得的最大总价值。如果答案太大,则以 10^9 + 7 为模返回。

因此,如果输入类似于库存 = [5,7],订单 = 6,那么输出将是 31,因为我们可以以价格 (5,4) 卖出第一个彩色球两次,第二个彩色球卖出 4 次 (7 ,6,5,4),所以总利润 5+4+7+6+5+4 = 31

示例

让我们看看以下实现以获得更好的理解 -

def solve(inventory, orders):
   low = 0
   high = 10000000

   while low < high:
      mid = (low+high)//2

      s = 0
      for i in inventory:
         if i > mid:
            s += i-mid

      if s > orders:
         low = mid+1
      else:
         high = mid


   mid = (low+high)//2

   ans = 0
   for i in inventory:
      if i > mid:
         ans += i*(i+1)//2 - mid*(mid+1)//2
         orders -= i-mid

   ans += orders*mid
   return ans % (10**9 + 7)

inventory = [5,7]
orders = 6
print(solve(inventory, orders))

输入

[6,8,7,11,5,9], [0,0,2], [2,3,5]
输出结果
31

猜你喜欢