DP 1D на Python: как решать + 12 задач с проверкой

DP 1D (одномерное динамическое программирование) — это приём для задач, где есть последовательность: кварталы на улице, ступеньки, дни, позиции на табло, призы в коридоре. В таких задачах нужно выбрать/собрать/дойти так, чтобы получить максимум (или минимум), соблюдая простые локальные ограничения — например «нельзя брать соседние», «прыжок на 1 или 2», «учитываем последние k шагов», «платим сумму монетами».

Как распознать задачу на DP 1D

Суть приёма

Мы заводим массив dp[i]лучший ответ для первых i элементов (или для позиции i). Дальше пишем переход: как получить dp[i] из уже посчитанных dp[i-1], dp[i-2] и т.п. Это ускоряет решение, потому что каждый dp[i] считается один раз: обычно получается O(n) вместо экспоненты.

С чего начать учиться

Ниже — задачи с автопроверкой и разбором подхода, чтобы закрепить DP 1D на практике.

Задачи по теме «DP 1D»

Смежные темы

Весь каталог задач

Куда дальше