额,,纪念一下,,这是这段时间做搜索题做得最快的一次,也是做的最清楚了
题意:
不说了,很清楚,
思路:
深搜
枚举第一行,然后生成下一行,会超时,打个表
代码:(打表)
#include <stdio.h>
#include<string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,cn;
int vis[29];
char str[40],s[40];
void chuly(int t) // 计算数量
{
strcpy(s+1,str+1);
int suma,sumb = suma = 0;
while(t)
{
for(int i=1;i<=t;i++)
{
if(s[i]=='+')
suma++;
if(s[i]=='-')
sumb++;
}
for(int i=1;i<t;i++)
if(s[i]==s[i+1])
s[i]='+';
else
s[i]='-';
t--;
}
if(suma==sumb)cn++;
}
void dfs(int count) // 深搜枚举
{
if(count==n+1)
{
chuly(n);
return;
};
if(!vis[count])
{
vis[count] = 1;
str[count] = '+';
dfs(count+1);
str[count] = '-';
dfs(count+1);
vis[count] = 0;
}
}
int main()
{
//freopen("Output.txt","w",stdout);
for(int i=1;i<=19;i++)
{ n = i;
memset(vis,0,sizeof(vis));
cn = 0;
dfs(1);
printf("%d,",cn);
}
}
代码:(表)
#include<stdio.h>
int main()
{
int ds[20]={0,0,0,4,6,0,0,12,40,0,0,171,410,0,0,1896,5160,0,0,32757};
int n;
while(~scanf("%d",&n))
{
printf("%d\n",ds[n]);
}
}