题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=491
悲剧啊,TEL了
#include<stdio.h>
#include<string.h>
int n,cnt,vis[30],dp[22][22];
int a,b;
bool fun()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(dp[i][j]==dp[i][j+1])
{
dp[i+1][j]=1;
b++;
}
else
{
dp[i+1][j]=0;
a++;
}
}
}
if(a==b) return true;
else return false;
}
void dfs(int cur)
{
a=0,b=0;
if(cur>=n)
{
for(int i=0;i<n;i++)
{
dp[0][i]=vis[i];
if(dp[0][i]==0) a++;
else b++;
}
if(fun()) cnt++;
return;
}
vis[cur]=0;
dfs(cur+1);
vis[cur]=1;
dfs(cur+1);
}
int main()
{
while(~scanf("%d",&n))
{
cnt=0;
dfs(0);
printf("%d\n",cnt);
}
}
不过把他们打表就ok了
#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]);
}
}