Ctrl K

Ящики от одного поставщика

Сложная
Нужно упаковать предметы, размеры которых даны в массиве items, — каждый в отдельный ящик. Предмет помещается в ящик, если его размер не больше размера ящика. Ящики можно заказать только у одного поставщика. suppliers[j] — список размеров ящиков, которые выпускает поставщик j; ящиков каждого размера у него сколько угодно. Пустое место в ящике — это размер ящика минус размер предмета в нём, а общие потери — сумма пустого места по всем ящикам. Выберите поставщика и ящики так, чтобы общие потери были наименьшими, и верните их по модулю 10⁹ + 7. Если ни у одного поставщика не получается упаковать все предметы, верните -1.
Пример 1
items=[1, 4, 6, 7], suppliers=[[5, 10], [7, 2], [8]] → 5

Первый поставщик: 1 и 4 в ящики размера 5, 6 и 7 — в ящики размера 10; пустого места (5−1)+(5−4)+(10−6)+(10−7) = 12. Второй: 1 в ящик 2, остальные в ящики 7 — потери 1+3+1+0 = 5. Третий: все в ящики 8 — потери 7+4+2+1 = 14. Лучший — второй, ответ 5.

Пример 2
items=[3, 9], suppliers=[[4, 8], [2]] → -1

Предмет размера 9 не помещается ни в один ящик ни у одного поставщика, поэтому ответ -1.

Пример 3
items=[2, 2, 2], suppliers=[[3], [2, 6]] → 0
Ограничения
  • 1 ≤ len(items) ≤ 10⁵, 1 ≤ items[i] ≤ 10⁵
  • 1 ≤ len(suppliers) ≤ 10⁵
  • 1 ≤ len(suppliers[j]), суммарно не больше 10⁵
  • 1 ≤ suppliers[j][k] ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКрасота клумб на бюджете СложнаяСколько цветёт в день визита СложнаяОбщая настройка с разной ценой шага СложнаяКак поделить счёт за подарки СложнаяБольше одинаковых за бюджет Сложная
загружаем Python…
Вход
items=[1, 4, 6, 7], suppliers=[[5, 10], [7, 2], [8]]
Ожидается
5

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 87 тестов на сервере, включая скрытые.