//打表题 这种时间明显不够,但样例有限的,可在线下先计算出所有结果,存入数组
/*
#include<stdio.h>
int n,a[20]={0,0,0,4,6,0,0,12,40,0,0,171,410,0,0,1896,5160,0,0,32757};
int main()
{
while(~scanf("%d",&n))
{
printf("%d\n",a[n]);
}
}
*/
#include<stdio.h>
#include<string.h>
int n,cnt,vis[30],map[22][22];
int a,b;
bool judge() //根据最上层,推出下面几层的,并进行判断是否符合条件
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++) //理解这里j<n-i-1 什么意思
{
if(map[i][j]==map[i][j+1]) // 0 0 0 n为3时第一种情况
{ // 1 1
map[i+1][j]=1; // 1
b++;
}
else
{
map[i+1][j]=0;
a++;
}
}
}
if(a==b)
return true;
else
return false;
}
void dfs(int cur)
{
a=0,b=0;
if(cur>=n)//最上层长度达到 n
{
for(int i=0;i<n;i++)
{
map[0][i]=vis[i];
if(map[0][i]==0)
a++;
else
b++;
}
if(judge())
cnt++;
return;
}
vis[cur]=0; //0,1两种情况都试一下
dfs(cur+1);
vis[cur]=1;
dfs(cur+1);
}
int main()
{
while(~scanf("%d",&n))
{
cnt=0;
dfs(0);
printf("%d\n",cnt);
}
}
/*
#include<stdio.h>
int n,a[20]={0,0,0,4,6,0,0,12,40,0,0,171,410,0,0,1896,5160,0,0,32757};
int main()
{
while(~scanf("%d",&n))
{
printf("%d\n",a[n]);
}
}
*/
#include<stdio.h>
#include<string.h>
int n,cnt,vis[30],map[22][22];
int a,b;
bool judge() //根据最上层,推出下面几层的,并进行判断是否符合条件
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++) //理解这里j<n-i-1 什么意思
{
if(map[i][j]==map[i][j+1]) // 0 0 0 n为3时第一种情况
{ // 1 1
map[i+1][j]=1; // 1
b++;
}
else
{
map[i+1][j]=0;
a++;
}
}
}
if(a==b)
return true;
else
return false;
}
void dfs(int cur)
{
a=0,b=0;
if(cur>=n)//最上层长度达到 n
{
for(int i=0;i<n;i++)
{
map[0][i]=vis[i];
if(map[0][i]==0)
a++;
else
b++;
}
if(judge())
cnt++;
return;
}
vis[cur]=0; //0,1两种情况都试一下
dfs(cur+1);
vis[cur]=1;
dfs(cur+1);
}
int main()
{
while(~scanf("%d",&n))
{
cnt=0;
dfs(0);
printf("%d\n",cnt);
}
}