Ctrl K

Растущая копилка наград: большие числа

Сложная
Дан массив rewards — награды, лежащие на столе. Изначально в копилке 0 очков. Награды можно брать по одной в любом порядке, но каждую — не больше одного раза. Награду со значением v разрешено взять, только если v **строго больше** текущей суммы в копилке; тогда v добавляется к сумме. Брать все награды не обязательно. Верните наибольшую сумму, которую можно накопить. Наград и их значений здесь до 5·10⁴, так что квадратичная динамика не уложится во время.
Пример 1
rewards=[2, 2, 5, 4] → 9

Если начать с 2, дальше можно взять 4 (сумма 6) или 5 (сумма 7), но не обе. Выгоднее начать с 4, а затем взять 5: 9.

Пример 2
rewards=[1, 3, 6, 10] → 19

1, затем 3 (сумма 4), затем 6 (сумма 10) — дальше 10 не больше 10. А 3, затем 6 (9), затем 10 даёт 19.

Пример 3
rewards=[7] → 7
Ограничения
  • 1 ≤ len(rewards) ≤ 5·10⁴
  • 1 ≤ rewards[i] ≤ 5·10⁴
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКак рассчитаться за меньше переводов СложнаяДве группы с одинаковым средним СложнаяСклейка фрагментов СложнаяЦепочки с квадратными суммами СложнаяСамая маленькая команда со всеми навыками Сложная
загружаем Python…
Вход
rewards=[2, 2, 5, 4]
Ожидается
9

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