Войти Регистрация
Алгоритмы

113. Кешбэк-квест без пропусков

Сложная

В приложении Т-Банка идёт квест на n дней. Задание дня i приносит points[i] баллов; у части дней баллы отрицательные — задание требует потратить бонусы, например оплатить подписку.

Первый и последний день выполнять обязательно. Между двумя выполненными днями можно пропустить не больше k − 1 дней подряд, то есть следующий выполненный день — не дальше чем через k дней после предыдущего. Иначе серия сгорает.

Верните наибольшую сумму баллов, которую можно собрать, сохранив серию.

В работе: Подсказка «какие задания можно пропустить без потери серии» в геймификации приложения.

Пример 1

Ввод
points = [10, -5, -20, 4, -3, 8]
k = 2
Вывод
17

Дни 0, 1, 3, 5: 10 − 5 + 4 + 8 = 17. Пропустить и день 1, и день 2 нельзя — разрыв 3 > k.

Пример 2

Ввод
points = [-7]
k = 3
Вывод
-7

Один день — он и первый, и последний.

Ограничения

  • 1 ≤ n ≤ 10⁵
  • 1 ≤ k ≤ n
  • −10⁴ ≤ points[i] ≤ 10⁴
  • Лимит — 2 с на тест (2000 мс).
Как вызывается ваш код Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула. print() и console.log() уходят в консоль.
def quest_max_points(points, k):
Динамическое программированиеМонотонная очередьСкользящее окноцельO(n)

Источник: наша задача на данных Т-Банка. Условие пересказано своими словами.