Динамическое программирование (DP) решает задачи с перекрывающимися подзадачами и оптимальной подструктурой, вычисляя каждую подзадачу один раз и переиспользуя результат. Два стиля — это мемоизация (нисходящий подход) и табуляция (восходящий подход).
Идея
Наивная рекурсия перевычисляет одни и те же подзадачи экспоненциально много раз. DP кэширует их, сокращая экспоненциальную сложность до полиномиальной.
