输入:n (1<n<=23).
输出不同方案的个数.
测试输入
3
测试输出
4
源代码
#include <stdio.h>
#define MAX 24
int count=0;//当前 +号的数量
int sum=0;//已找到的符号三角形的数量
int p[MAX][MAX];//1代表+,0代表-
int n=0;
int half=0;//half=n*(n+1)/4
void back_triangle(int t)
{
int i,j;
if((count>half) || (t*(t-1)/2-count>half)) return;
if(t>n) sum++;
else
{
for(i=0;i<2;i++){
p[1][t]=i;
count+=i;
for(j=2;j<=t;j++){
p[j][t-j+1]=p[j-1][t-j+1]^p[j-1][t-j+2];
count+=p[j][t-j+1];
}
back_triangle(t+1);
for(j=2;j<=t;j++)
count-=p[j][t-j+1];
count-=i;
}
}
}
int main()
{
scanf("%d",&n);
half=n*(n+1)/2;
if(half%2==1) //输出个数为奇数时
return 0;
half/=2;
back_triangle(1);
printf("%d\n",sum);
}