通过在 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