Вот тут на контесте попалась такая вот ДП. Не могу понять, как решить. Вот условие :
Рассмотрим двухбуквенные последовательности, которые могут состоять только из букв a, b и при этом: 1.никогда не содержат двух букв b подряд, 2.ни в одном последовательности никогда не встречается три одинаковых подпоследовательности подряд. Например, этому правилу не удовлетворяют следующие последовательности: aaa (так как три раза подряд содержит a), ababab (так как три раза подряд содержит ab), aabababa (также три раза подряд содержит ab).
Напишите программу, которая подсчитает количество всех двухбуквенных последовательностей длинной ровно K символов, удовлетворяющих сформулированным выше правилам.
Формат входных данных
Вводится одно число K (1 ≤ K ≤ 100 000).
Формат выходных данных
Выведите одно число — количество различных двухбуквенных последовательностей длины K.
У меня получилась формула a[i] = a[i-1]+a[i-2]-x; Но вот что отнимать надо тут(этот пресловутый x), я не знаю.
Может кто-то поможет.
Большое спасибо!
А что за контест, если не секрет?
Да там одного университета в Беларуси. И такая там задача была
Вот набросок решения: любую подходящую последовательность можно разбить на токены вида "aa..aab" (первый токен может быть без букв "a"), иначе не соблюдается первое свойство. В каждом таком токене не более двух букв "a", иначе не соблюдается второе свойство. Таким образом, мы выписываем подряд несколько токенов вида "ab" и "aab", и можем дописать в начало букву "b" и дописать в конец одну или две буквы "a".
может быть Формула включение и исключение есть ли там модуль, ответ может быть большим?
Для маленьких К перебор, а для остальных ответ 0: https://olympiads.ru/moscow/2009/team/archive/f_mumba.pdf