26.03 Перевоз грузов
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Для перевозки партии грузов различной массы выделен грузовик, но его грузоподъёмность ограничена, поэтому перевезти сразу все грузы не удастся. Грузы массой от 310 до 320 кг включительно грузят в первую очередь, выбирая грузы по убыванию массы, начиная с самого тяжёлого. На оставшееся после этого место стараются взять как можно большее количество грузов. Если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т.д. Известны количество грузов, масса каждого из них и грузоподъёмность грузовика. Необходимо определить количество и общую массу грузов, которые будут вывезены при погрузке по вышеописанным правилам.
Входные данные
Первая строка входного файла содержит два целых числа через пробел: N — общее количество грузов и M — грузоподъёмность грузовика в кг. Каждая из следующих N строк содержит одно целое число — массу груза в кг.
Выходные данные
В ответе запишите два целых числа: сначала максимально возможное количество грузов, затем их общую массу.
Пример организации исходных данных во входном файле:
В данном случае сначала нужно взять груз массой 315 кг. Остается 405 кг. После этого можно вывезти ещё максимум 3 груза. Это можно сделать тремя способами: 100 + 120 + 140, 100 + 140 + 160, 100 + 120 + 160. Выбираем способ, при котором вывозится груз наибольшей возможной массы. Таких способов два: 100 + 120 + 160, 100 + 140 + 160. Из этих способов выбираем тот, при котором больше масса второго по величине груза, то есть 100 + 140 + 160. Всего получается 4 груза общей массой 715 кг. Ответ: 4 715.
Решение 1 ( Excel / LibreOffice):
Сначала откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice. Для удобства числовые
значения количества грузов и грузоподъёмность грузовика (,
) подвинем правее в ячейки
и
.
Сортируем данные столбца
( Сортировка и фильтр — Сортировка по возрастанию). Находим первый груз
размером
и начинаем набирать, пока не получим в правом нижнем углу максимальную сумму, не превышающую
. Мы собрали
груз массой
. У нас остается
кг (
) свободного места.
Используем жадный алгоритм: чтобы вывезти максимальное количество грузов, необходимо брать грузы с
наименьшей массой до тех пор, пока их суммарная масса меньше грузоподъемности. Поэтому переходим в
самый верх и начинаем набирать максимальную массу, не превышающую
. Выходит, что мы можем
взять
груза массой
кг. Заменяем груз весом
на груз весом
, так как займем больше
места. Выходит, что мы заняли всё место, значит, сумма равна
, а количество
.
Решение 2 (Python):
file = open("Задание_26__i0ia.txt") lines = file.readlines() n, m = map(int, lines[0].split()) array = list(map(int, lines[1:])) array = sorted(array) i = 0 current_sum = 0 last_elem = 0 ind_last = 0 count = 0 while array[i] <= 320: if array[i] >= 310 and current_sum + array[i] <= m: current_sum += array[i] last_elem = array[i] count += 1 else: ind_last = i i += 1 for j in range(ind_last): if current_sum + array[j] <= m: current_sum += array[j] last_elem = array[j] count += 1 for j in range(i, len(array)): if current_sum + array[j] <= m: current_sum += array[j] last_elem = array[j] count += 1 free_space = m - current_sum + last_elem for i in range(len(array) - 1, 0, -1): if array[i] <= free_space: current_sum += array[i] - last_elem break print(count, current_sum)
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

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

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

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

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

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!