Динамическое программирование - это подход, когда задача делится на элементарные шаги, на каждом шаге запоминается оптимальный результат, который используется на следующем шаге. Существует динамика вперед (когда известно то, что было вначале и на этом основании вычисляется следующий элемент) и динамика назад (когда известно, что будет в конце и нужно определить все предыдущие элементы). Речь пойдет о последовательностях 0 и 1, о размене, о количестве маршрутов, а также кузнечике, черепашке и рюкзаке.Кроме того, будут рассмотрены алгоритмы поиска наибольшей возрастающей подпоследовательности (НВП) и наибольшей общей подпоследовательности (НОП).