在 Python 中查找最接近的甜点成本的程序

假设我们有两个名为 baseCosts 的数组,其中有 n 个项目,我们可以从中选择 base 和 toppingCosts,其中有 m 个项目,我们可以选择 toppings 并有一个目标值。我们必须遵循这些规则来制作甜点。

  • 必须正好有一个基地。

  • 我们可以添加一种或多种配料,也可以完全不添加配料。

  • 每种类型的浇头最多有两种。

这里 baseCosts[i] 代表第 i 个冰淇淋基料的价格。TopingCosts[i] 表示第 i 个浇头之一的价格。目标值代表甜点的目标价格。我们必须制作一个总成本尽可能接近目标的甜点。我们必须找到最接近的甜点成本作为目标。如果有多个答案,返回较低的一个。

因此,如果输入类似于 baseCosts = [2,8], toppingCosts = [4,5], target = 12,那么输出将为 12,因为我们可以以成本 8 取基数,然后以成本取第一个顶部的 1 4,而且没有 type2 浇头,所以总成本 8+4 = 12。

示例

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

def solve(baseCosts, toppingCosts, target):

   best_cost = baseCosts[0]

   for b in range(len(baseCosts)):

      bitmask = [0] * len(toppingCosts)

      while True:

         current_price = baseCosts[b]

         for j in range(len(bitmask)):

            current_price += bitmask[j] * toppingCosts[j]

         if current_price - target == 0:

            return target

         elif abs(current_price - target) < abs(best_cost - target):

            best_cost = current_price

         elif abs(current_price - target) == abs(best_cost - target):

            if current_price < best_cost:

               best_cost = current_price

         if 0 not in bitmask and 1 not in bitmask:

            break

         for i in range(len(bitmask)):

            if bitmask[i] != 2:

               bitmask[i] += 1

               break

            else:

               bitmask[i] = 0

   return best_cost

baseCosts = [2,8]

toppingCosts = [4,5]

target = 12

print(solve(baseCosts, toppingCosts, target))

输入

[2,8], [4,5], 12
输出结果
12

以上是 在 Python 中查找最接近的甜点成本的程序 的全部内容, 来源链接: utcz.com/z/354390.html

回到顶部