Тема 26. Обработка целочисленной информации с использованием сортировки

26.09 Прочие прототипы

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации с использованием сортировки
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#119549

Входной файл содержит информацию о заказах на использование фотостудии в течение суток. Каждый заказ включает время начала и окончания съёмки (в минутах от начала суток), а также сумму, которую клиент готов заплатить за аренду студии. Съемки можно проводить только со следующей минуты после окончания предыдущей.

Определите максимальный доход, который можно получить за аренду студии, а также общую продолжительность съёмок, которые будут проведены в этом случае. Если максимальный доход можно получить несколькими способами, то в ответ нужно записать минимальную общую продолжительность съёмок, при которой будет получен максимальный доход.

Входные данные

В первой строке файла записано натуральное число N  (1 ≤ N ≤ 1000  ) — количество заказов. Каждая из следующих N строк содержит по три числа: время начала, время окончания съёмки (натуральные числа, не превышающие 1440  ), и сумму оплаты.

Выходные данные

Два числа через пробел: максимальный доход и суммарная продолжительность выбранных съёмок.

Пример входного файла:

5

50  100  2

90  130  4

110  140  5

135  180  3

170  210  6

Максимальный доход достигается при выборе заказов 1  , 3  , 5  . Общая продолжительность: (100− 50 +1) +(140− 110 + 1) + (210 − 170 + 1) = 123  . Ответ: 13  123  .

Вложения к задаче
Показать ответ и решение
f = open(’26_1.txt’)
n = int(f.readline()) # Kоличество заявок
# Записываем времена начала, окончания съемок и их стоимость
a = [list(map(int, i.split())) for i in f]
a.sort(key=lambda x:x[1]) # Сортировка по времени окончания съемки
price = [i[2] for i in a] # Cписок стоимостей аренды
tm = [i[1]-i[0]+1 for i in a] # Список длительностей аренды
cnt = [1]*n # Список количества аренд

for i in range(1, n): # Перебираем заявки
    for j in range(i): # Все предыдущие заявки до текущей
    # Если съемка j заканчивается до начала съемки i
        if a[j][1] < a[i][0]:
            # Если сумма оплаты i-й и j-й заявок больше текущей максимальной
            if price[j]+a[i][2] > price[i]:
                # Обновляем максимальную сумму оплаты для i-й заявки
                price[i] = price[j]+a[i][2]
                # Обновляем общую длительность съемок
                tm[i] = tm[j]+a[i][1]-a[i][0] + 1
                # Обновляем количество съемок
                cnt[i] = cnt[j]+1
            elif price[i] == price[j]+a[i][2] and tm[i] > (tm[j]+a[i][1]-a[i][0] + 1):
                tm[i] = tm[j] + a[i][1] - a[i][0] + 1
mx = max(price) # Mаксимальная сумма оплаты за день
print(mx)
for i in range(n):
    if price[i] == mx:
        print(tm[i]) # Длительность всех выбранных съемок

Ответ: 593 971

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!