Ctrl K

Бригада с оплатой по навыку

Сложная
Есть n кандидатов. У i-го кандидата навык skill[i], и меньше min_pay[i] он работать не согласен. Нужно нанять ровно crew_size человек так, чтобы: - каждый получил не меньше своей минимальной оплаты; - оплата внутри бригады была пропорциональна навыку: если у одного навык вдвое выше, чем у другого, то и получает он вдвое больше. Верните наименьшую сумму, которую придётся заплатить всей бригаде. Ответ принимается с точностью до 10⁻⁵.
Пример 1
skill=[4, 2, 6], min_pay=[20, 6, 18], crew_size=2 → 24.0

Берём работников 1 и 2: им нужно не меньше 3 за единицу навыка, значит платим 2·3 = 6 и 6·3 = 18, итого 24. Любая пара с работником 0 требует ставку 5 и дороже.

Пример 2
skill=[3, 1, 2], min_pay=[9, 1, 2], crew_size=3 → 18.0

Нанимаем всех. Самая высокая ставка у работника 0 — 3 за единицу навыка, поэтому платим 3·(3 + 1 + 2) = 18.

Пример 3
skill=[5, 7, 3], min_pay=[10, 7, 9], crew_size=1 → 7.0
Ограничения
  • 1 ≤ crew_size ≤ n ≤ 10⁴
  • n = len(skill) = len(min_pay)
  • 1 ≤ skill[i], min_pay[i] ≤ 10⁴
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиНаращиваем капитал проектами СложнаяБольше заказов к сроку СложнаяСамый узкий отрезок для всех списков СложнаяТемп отряда задаёт самый слабый СложнаяРазброс оценок при делении посылок Сложная
загружаем Python…
Вход
skill=[4, 2, 6], min_pay=[20, 6, 18], crew_size=2
Ожидается
24.0

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