Задачи на динамику (15 октября 2015)
- Задача take про 2D возрастающую подпоследовательность (из контеста)
- Решение за O(n3) номер 1: min_end[i, j, length]
- Решение за O(n3) номер 2: перебираем клетки [i, j] в порядке возрастания a[i, j], и считаем минимум на [0..i] × [0..j] за O(n)
- LCP[i,j] за O(n2) (наибольший общий префикс i-го и j-го суффиксофф)
- Задачи на подотрезках
- Folding за O(n3) timus : 1238
- Взвешенный бинпоиск за O(n3) (стоимость обращения к элементу i равна cost[i]; минимизируем худший случай при условии, что выбираем произвольный элемент)
- Покраска забора painter за O(n3k), за O(n3) (дан массив цветов − что должно получиться, один ход − покрасить отрезок, минимизировать число ходов)
- Динамика по подмножествам
- Множества, хранение, операции: &, |, ^, (1 << i), (x >> i) & 1
- Для каждого числа от 0 до (2k)-1 за O(2k) посчитать количество бит в нём (размер каждого подмножества)
- Для каждого числа от 0 до (2k)-1 за O(2k) посчитать старший бит в нём
- Для каждого подмножества множества за O(2k) посчитать сумму элементов в нём (кодим эту задачу)
- Для каждого множества вершин в графе за O(2k) проверить, независимое ли оно
- Задача о гамильтоновом пути
- Задача о гамильтоновом цикле
- Задача коммивояжёра
- Бонус: динамика по скошенному профилю, рекурсивный вариант на примере "количества покрытий доминошками"