Акция в приложении Т-Банка идёт n дней. Отметка в день i приносит points[i] баллов; в дни с платной подпиской баллы отрицательные — это списание.
Клиент обязан отметиться в день 0 и в последний день, а между соседними отметками может пройти не больше k дней (из дня i можно перейти в дни i+1 … i+k). Верните максимальную сумму баллов.
В работе: ДП, где переход берёт максимум по окну последних k состояний: расписания, прыжки с ограничением шага.
Пример 1
Ввод
points = [10, -5, -2, 4, 0, 3] k = 3
Вывод
17
Дни 0, 3, 4, 5: 10 + 4 + 0 + 3 = 17.
Пример 2
Ввод
points = [-3] k = 1
Вывод
-3
Один день — он же первый и последний.
Ограничения
- 1 ≤ длина
points≤ 10⁵ - 1 ≤
k≤ 10⁵ - -10⁴ ≤
points[i]≤ 10⁴ - Лимит — 2 с на тест (2000 мс).
Как вызывается ваш код
Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула.
print() и console.log() уходят в консоль.
def max_checkin_points(points, k):
Источник: наша задача на данных Т-Банка. Условие пересказано своими словами.
Давали на собеседовании?
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.