Динамическое программирование — способ решения сложных задач путём разбиения их на более простые подзадачи.