Минимальная суммарная стоимость билетов
Как можно решить следующую задачу, нужен ли для этого полный перебор или рекурсия? Ниже прикрепляю неудачный код.
n людей едет в метро. Известно, что каждому нужно будет совершить m поездок. В метро есть три типа билетов:
билет на одну поездку, который стоит a рублей.
безлимитный билет на одного человека который стоит b рублей.
групповой безлимитный билет на k людей который стоит c рублей.
Формат входных данных:
первый ряд имеет 3 целых числа n, m и k ( 1 ≤ n, m, k ≤ 1000)
второй ряд имеет 3 целых числа a, b и c (1 ≤ a, b, c ≤ 1000)
Формат выходных данных: выведите единственное целое число — минимальную суммарную стоимость билетов.
Пример:
входные данные
7 4 5
2 7 20
выходные данные
34
Неудачный код:
n,m,k = 7,4,5
a,b,c = 2,7,20
cost_1 = a
cost_2 = b/m
cost_3 = (c/m)/k
costs = {"cost_1": cost_1, "cost_2": cost_2, "cost_3": cost_3}
min_cost = None
ticket = ''
for key in costs:
if min_cost is None or costs[key] < min_cost:
min_cost = costs[key]
ticket = key
result = 0
if ticket == "cost_1":
result = cost_1 * m * n
elif ticket == "cost_2":
result = b * n
elif ticket == "cost_3":
if n % k == 0:
result = n/k * c
else:
temp = n//k
temp_2 = n - (temp * k)
min_second_cost = None
second_ticket = ''
for key in costs:
if key == ticket:
continue
else:
min_second_cost = costs[key]
second_ticket = key
temp_result = 0
if second_ticket == "cost_1":
temp_result = cost_1 * m * temp_2
elif second_ticket == "cost_2":
temp_result = b * temp_2
result = temp_result + temp * k
print(result)
Ответы (1 шт):
Автор решения: Danis
→ Ссылка
def foo(n, m, k, a, b, c):
cost0 = n * m * a
cost1 = n * b
cost2 = n // k * c
print(cost0, cost1, cost2)
if cost2 != 0:
cost2 += foo(n % k, m, k, a, b, c)
else:
return min(cost0, cost1)
return min(cost0, cost1, cost2)