Вам не нужно динамическое программирование.Для длины массива X число допустимых массивов равно Fib (X + 1), где Fib - массив чисел Фибоначчи.
X = 1: допустимые массивы: 2
X = 2:допустимые массивы: 3
X = 3: допустимые массивы: 5
X = 4: допустимые массивы: 8
и т. д. *
Демонстрация:
Давайте предположим, что мы ищем массивы для X, и мы знаем количество допустимых массивов для X-1.Мы можем свободно добавлять ноль в конец каждого из этих массивов длины X-1, так что пока это F (X-1).Мы также можем добавить '1' в конец каждого массива X-1, который заканчивается 0. Но сколько из этих массивов?Ну, это точно F (X-2), потому что мы могли бы сгенерировать массивы длины X-1 с нулевым окончанием точно таким же образом: добавив ноль в конце каждого массива длины X-2.Итак, F (X) = F (X-1) + F (X-2) И это в точности определение массива Фибоначчи.
Все, что нам нужно сделать, - это вручную вычислить первые два элемента, чтобы определить,это в точности массив Фибоначчи или он сдвинут.
Вы даже можете найти формулу для вычисления N-го элемента массива Фибоначчи, чтобы ее можно было решить в O (1).