Здесь я использовал динамический c подход к программированию.
dp (i, x): обозначает количество строк длины i с x последовательными 1 с в позиции i + 1 до i + x.
n здесь - длина строки битов, взятой в качестве ввода от пользователя
Однако, я думаю, что я, возможно, считаю строки, которые имеют более 3 последовательных строк?
РЕДАКТИРОВАТЬ : просто чтобы уточнить
- Я ищу строки с ровно 3 1 с. Например, 111000 является допустимой строкой, а 1110101111 и 10101000 - нет.
#include<stdio.h>
#include<stdlib.h>
int solve(int i,int x,int **arr)
{
if(i<0)
return x==3;
if(arr[i][x]!=-1)
return arr[i][x];
arr[i][x] = solve(i-1,0,arr);
arr[i][x]+=solve(i-1,x+1,arr);
return arr[i][x];
}
int main()
{
int n;
scanf("%d",&n);
int **arr = (int**)malloc(n*sizeof(int*));
for(int i=0;i<n;i++)
arr[i] = (int*)malloc(4*sizeof(int));
for(int i=0;i<n;i++)
for(int j=0;j<4;j++)
arr[i][j]=-1;
for(int i=0;i<n;i++)
arr[i][3] = (1<<(i+1));
printf("%d",solve(n-1,0,arr));
return 0;
}