题目描述 Description
输出仅有0和1组成的长度为n的字符串,并且其中不能含有3个连续的相同子串。
输入描述 Input Description
输入文件只有一行一个整数n,表示有0和1组成的字符串的长度。0<=n<=30。
输出描述 Output Description
输出文件只有一行一个整数,表示所有满足条件的字符串的个数。
样例输入 Sample Input
1
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int sum=0;
int map[31]={0};
void fun(int x)
{
if(x>=n)
{
sum++;
return ;
}
if(x<2)
{
map[x]=0;
fun(x+1);
map[x]=1;
fun(x+1);
}
if(x>=2)
{
if(map[x-2]==map[x-1])
{
if(map[x-1]==1)
{
map[x]=0;
fun(x+1);
}
else
{
map[x]=1;
fun(x+1);
}
}
else{
map[x]=0;
fun(x+1);
map[x]=1;
fun(x+1);
}
}
}
int main()
{
scanf("%d", &n);
if(n==0)
{
printf("%d\n",0);
return 0;
}
fun(0);
printf("%d\n", sum);
return 0;
}