在 Python 中查找购买所有 N 个糖果的最小和最大数量

假设有一家糖果店,有 N 种不同类型的糖果,并且所有 N 种不同类型的糖果的价格都已给出。这家商店还提供有吸引力的优惠。根据此优惠,我们可以从商店购买单个糖果,并免费获得最多 K 种不同类型的其他糖果。我们必须找到购买所有 N 种不同类型糖果所必须花费的最低金额。我们还必须找到购买所有 N 种不同类型糖果所必须花费的最大金额。在这两种情况下,我们必须利用报价并获得尽可能多的糖果。如果有 k 个或更多糖果可用,我们必须为每次购买糖果选择 k 个糖果。但是,如果可用的糖果少于 k 个,我们必须选择所有糖果来购买糖果。

因此,如果输入类似于 price = [4, 3, 2, 5] 和 k = 2,那么输出将是 Minimum = 5 和 Maximum = 9。这是因为当 k 为 2 时,如果我们购买一颗糖果并且我们最多可以免费带两个。在第一种情况下,我们可以购买价值 2 的糖果并免费获得价值 4 和 5 的糖果,我们也可以购买价值 3 的糖果,因此最低成本 = 2 + 3 = 5。另一方面,第二个如果我们购买价值 5 的糖果并免费获得价值 2 和 3 的糖果,或者我们也可以购买价值 4 的糖果。所以,最大成本 = 4 + 5 = 9。

在线示例

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

def get_min(A,k):
   n = len(A)
   A.sort()
   res = 0
   i=0
   while(n):
      res += A[i]
      n = n-k
      i += 1
   return res
def get_max(A, k):
   n = len(A)
   A.sort()
   res = 0
   idx = 0
   i=n-1
   while(i>=idx):
      res += A[i]
      idx += k
      i -= 1
   return res

A = [4, 3, 2, 5]
k = 2
print(get_min(A, k),get_max(A, k))

输入

[4, 3, 2, 5], 2
输出结果
5 9

猜你喜欢