Слайд 10Задача I: Строки Фибоначчи
Темы: Динамическое программирование, рекуррентные соотношения
Для каждой позиции в строке
легко определить, есть ли начаиная с неё F(1, X, Y), F(2, X, Y) и F(3, X, Y), удобно также отдельно посчитать F(4, X, Y).
Обозначим за G(pos, i, X, Y) функцию, возвращающую истину, если начиная с позиции pos идет F(i, X, Y). Тогда G(pos, i + 1, X, Y) = G(pos, i, X, Y) and G(pos + fib(i), i - 1, X, Y), где fib(i) - i-ое число Фибоначчи (совпадающее с длиной i-ой строки Фибоначчи). Достаточно посчитать эти функции в порядке возрастания i. Можно делать это эффективно, не перебирая X, Y, а определяя их по первым буквам.
Сложность такого решения O(NlogN), т.к. числа Фибоначчи растут примерно как 2N
Также возможно решение с использованием хешей.