ЛКШ 2018, 9-й день, Оптимизации ДП (Даня Николенко)
Общая задача для следующих пунктов 1, 2, 3, 7: n точек на прямой, разбить на k отрезков, минимизировав сумму квадратов длин.
- Разделяй и властвуй, O(k * nlogn).
- Оптимизация Кнута:
- Решение нашей задачи за O(n2).
- Точки на окружности, k-угольник макс. площади на этих точках, O(n2logk).
- Convex hull trick. Бинпоиск: O(k * nlogn), указатель: O(k * n).
- Правильный выбор состояния. Задача о кораблях.
- ДП по подмаскам:
- Гамильтонов путь за O(2n * n) битовым сжатием.
- Сумма элементов для каждого подмножества, O(2n).
- Префиксные суммы:
- Префиксные суммы на прямоугольнике без включений-исключений.
- Сумма по подмаскам, O(2n * n).
- Обратная задача к предыдущей: повторяем действия в обратном порядке.
- Лямбда оптимизация.
- [дополнительно] Рюкзак:
- Рюкзак на отрезке.
- Битовое сжатие: O(S * n / bitset).
- Корневая #1: O(sqrt(S)) различных весов, O(S * sqrt(S)).
- Корневая #2: сводим n предметов к O(sqrt(S)) предметов ==> применяем битовое сжатие и получаем O(S * sqrt(S) / bitset).