Метод динамического программирования при решении олимпиадных задач заключается в разбиении сложной задачи на менее сложные подзадачи. szewk.github.io
Ключевая идея: решить отдельные части задачи (подзадачи), после чего объединить их решения в одно общее. docs.google.com Часто многие из этих подзадач одинаковы. docs.google.com Подход динамического программирования состоит в том, чтобы решить каждую подзадачу только один раз, сократив тем самым количество вычислений. docs.google.com
Решение подзадач при этом происходит в порядке возрастания их размерности — от меньшей к большей. urok.1sept.ru
Некоторые типы олимпиадных задач, для которых применяют метод динамического программирования:
- Задача о рюкзаке. www.iro.yar.ru Есть набор предметов с весами и стоимостями, нужно выбрать такие предметы, чтобы их общий вес не превышал заданного предела, а общая стоимость была максимальной. www.iro.yar.ru
- Задачи на потоки. www.iro.yar.ru Включают в себя нахождение максимального потока в сети, потока минимальной стоимости и т. д.. www.iro.yar.ru
- Задачи о перекрывающихся подмножествах. www.iro.yar.ru Нужно найти минимальное количество подмножеств, которые покрывают все элементы данного множества. www.iro.yar.ru
- Задачи об оптимальном пути. www.iro.yar.ru Включают в себя задачи о лабиринтах, нахождение кратчайшего пути в графе и т. п.. www.iro.yar.ru
- Задачи коммивояжёра. www.iro.yar.ru В этих задачах коммивояжёр должен посетить все города, вернувшись в исходный, найдя при этом оптимальный маршрут. www.iro.yar.ru
- Задачи о разбиении. www.iro.yar.ru Здесь требуется найти такое разбиение числа на слагаемые, чтобы их сумма была наименьшей или наибольшей. www.iro.yar.ru