ZQUOJ1923符号三角形问题

来源:互联网 发布:网络舆情分析师报名 编辑:程序博客网 时间:2024/06/05 10:07
Description

符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的"+"和"-"的个数相同。

在一般情况下,符号三角形的第一行有n个符号。如图所示是由14个"+"号和14个"-"号组成的符号三角形。两个同号下面都是"+",两个异号下面都是"-"号。

+   +   -   +   -   +   +
+   -   -   -   -   +
-   +   +   +   -
-   +   +   -
-   +   -
-   -
+

Input

输入的第一个为测试样例的个数T,接下来有T个测试样例。每个测试样例的只有一行n ( n ≤ 25 )。

Output

对应每个测试样例输出一行,格式为"Case #: M",其中'#'表示第几个测试样例(从1开始计),M为不同的符号三角形个数。

Sample Input

2
2
3

Sample Output

Case 1: 0

Case 2: 4

#include<stdio.h>int a[27][27];int k,n,sum,y;void t(int m){    if(y>k||m*(m-1)/2-y>k) return ;    if(m>n)    {        sum++;        return ;    }    a[1][m]=0;    int i=y,j;    for(j=2;j<=m;j++)    {        a[j][m-j+1]=a[j-1][m-j+1]^a[j-1][m-j+2];        y+=a[j][m-j+1];    }    t(m+1);    a[1][m]=1;    y=i+1;    for(j=2;j<=m;j++)    {        a[j][m-j+1]=a[j-1][m-j+1]^a[j-1][m-j+2];        y+=a[j][m-j+1];    }    t(m+1);}int main(){    int m,i,j;    scanf("%d",&m);    for(j=1;j<=m;j++)    {        scanf("%d",&n);        k=n*(n+1)/2;        if(k&1)         {            printf("Case %d: 0\n",j);            continue;        }        sum=0;        y=0;        k/=2;        t(1);        printf("Case %d: %d\n",j,sum);    }return 0;}


0 0