Динамическое программирование как способ решения сложных задач путём разбиения их на простые подзадачи. Наибольшая возростающая подпоследовательность. Перемножение нескольких матриц. Независимые множества в деревьях. Топологическая сортировка вершин.