- Python Basic Tutorial
- Python - Home
- Python - Overview
- Python - Environment Setup
- Python - Basic Syntax
- Python - Comments
- Python - Variables
- Python - Data Types
- Python - Operators
- Python - Decision Making
- Python - Loops
- Python - Numbers
- Python - Strings
- Python - Lists
- Python - Tuples
- Python - Dictionary
- Python - Date & Time
- Python - Functions
- Python - Modules
- Python - Files I/O
- Python - Exceptions

# Program to find closest dessert cost in Python

Suppose we have two arrays called baseCosts with n items from them we can select base and toppingCosts with m items from them we can select toppings and also have a target value. We have to follow these rules to make dessert.

There must be exactly one base.

We can add one or more topping or have no toppings at all.

There are at most two of each type of topping.

Here baseCosts[i] represents the price of the ith ice cream base. The toppingCosts[i] represents price of one of the ith topping. The target value is representing the target price for dessert. We have to make a dessert with a total cost as close to target as possible. We have to find the closest possible cost of the dessert to target. If there are multiple answers, return the lower one.

So, if the input is like baseCosts = [2,8], toppingCosts = [4,5], target = 12, then the output will be 12 because we can take base with cost 8, then take 1 of first topping with cost 4, and no type2 topping, so total cost 8+4 = 12.

To solve this, we will follow these steps −

best_cost := baseCosts[0]

for b in range 0 to size of baseCosts - 1, do

bitmask := an array whose size is same as size of toppingCosts and fill with 0

do the following infinitely, do

current_price := baseCosts[b]

for j in range 0 to size of bitmask - 1, do

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

if current_price - target is same as 0, then

return target

otherwise when |current_price - target| < |best_cost - target|, then

best_cost := current_price

otherwise when |current_price - target| is same as |best_cost - target|, then

if current_price < best_cost, then

best_cost := current_price

if 0 not in bitmask and 1 not in bitmask, then

come out from loop

for i in range 0 to size of bitmask - 1, do

if bitmask[i] is not same as 2, then

bitmask[i] := bitmask[i] + 1

come out from loop

otherwise,

bitmask[i] := 0

return best_cost

## Example

Let us see the following implementation to get better understanding −

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))

## Input

[2,8], [4,5], 12

## Output

12

- Related Articles
- Program to find closest subsequence sum in Python
- Program to find closest room from queries in Python
- JavaScript Program to Find closest number in array
- Program to find minimum cost to merge stones in Python
- Program to find minimum cost for painting houses in Python
- Program to find minimum cost to connect all points in Python
- Program to find minimum cost to cut a stick in Python
- Program to find minimum cost to hire k workers in Python
- Python Program for Find the closest pair from two sorted arrays
- Program to find total cost for completing all shipments in python
- Program to Find Out the Minimum Cost to Purchase All in Python
- Program to find minimum deletion cost to avoid repeating letters in Python
- Program to find three unique elements from list whose sum is closest to k Python
- How to find the value closest to positive infinity in Python?
- How to find the value closest to negative infinity in Python?