У концерна по производству пастеризованного молока есть N ферм. Все фермы расположены вдоль некоторого прямолинейного пути и имеют номера, соответствующие расстоянию от нулевой отметки до конкретной фермы. Известно количество литров молока, которое ежедневно получают на каждой ферме.
Концерн планирует открыть молокоперерабатывающий завод при одной из ферм. Молоко на завод с ферм перевозят в бидонах вместимостью 20 литров каждый.
Определите минимальную общую стоимость доставки молока со всех ферм на завод.
python
def calculate_delivery_cost(daily_milk_production):
# Сортируем фермы по расстоянию от нулевой отметки
sorted_farms = sorted(daily_milk_production, key=lambda x: x[0])
# Вычисляем общее количество молока
total_milk = sum(x[1] for x in sorted_farms)
# Подсчитываем стоимость доставки
delivery_cost = 0
remaining_milk = 0
for farm in sorted_farms:
# Проверяем, сколько молока осталось после заполнения предыдущего бидона
remaining_milk += farm[1]
# Проверяем, сколько бидонов нам понадобится
num_buckets = remaining_milk // 20
# Считаем стоимость доставки заполненных бидонов
delivery_cost += num_buckets * farm[0]
# Остаток молока после заполнения бидонов
remaining_milk %= 20
# Проверяем, осталось ли у нас молоко после всех ферм
if remaining_milk > 0:
# Считаем стоимость доставки оставшегося молока
delivery_cost += sorted_farms[-1][0] * remaining_milk
return delivery_cost
В данном коде мы сортируем фермы и вычисляем общее количество молока. Затем мы проходим по отсортированному списку ферм, подсчитываем необходимое количество бидонов и считаем стоимость доставки. Если остается остаток молока после всех ферм, мы также учитываем его в стоимости доставки.
Приведенный код имеет сложность O(N log N), где N - количество ферм. Время работы алгоритма зависит от сортировки ферм, поэтому сложность O(N log N) является оптимальной.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет