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