符号三角形

符号三角形

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 166 Accepted Submission(s): 99
 
Problem Description
符号三角形的 第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“,2个异 号下面是”-“ 。计算有多少个不同的符号三角形,使其所含”+“ 和”-“ 的个数相同 。 n=7时的1个符号三角形如下:
+ + - + - + +
+ - - - - +
- + + + -
- + + -
- + -
- -
+
 
Input
每行1个正整数n <=24,n=0退出.
 
Output
n和符号三角形的个数.
 
Sample Input
15
16
19
20
0
 
Sample Output
15 1896
16 5160
19 32757
20 59984
 
 
Source
ECJTU 2008 Autumn Contest
 
Recommend
lcy
/*
暴力不要脸地打表
*/
#include<bits/stdc++.h>
using namespace std;
int op(int x)
{
    int m[25][25];
    memset(m,0,sizeof m);
    int cur=0;
    for(int i=0;i<pow(2.0,x);i++)
    {
        //cout<<"pow(2.0,x-1)="<<pow(2.0,x)<<endl;
        int n=i;
        int l=0,r=0;
        for(int j=0;j<x;j++)
        {
            m[x][j]=n%2;
            if(m[x][j]==1)
                l++;
            else
                r++;
            n/=2;
        }
        //for(int j=0;j<20;j++)
        //{
        //    cout<<m[x][i];
        //}
        //cout<<endl;
        for(int j=x-1;j>=1;j--)
        {
            for(int k=0;k<j;k++)
            {
                m[j][k]=(m[j+1][k]^m[j+1][k+1]);
                if(m[j][k]==1)
                    l++;
                else
                    r++;
            }
        }
        if(l==r)
            cur++;
        //cout<<"l="<<l<<" r="<<r<<endl;
    }
    return cur;
}
int main()
{
    //freopen("C:\\Users\\acer\\Desktop\\in.txt","r",stdin);
    int n;
    int a[25]={0,0,0,4,6,0,0,12,40,0,0,171,410,0,0,1896,5160,0,0,32757,59984,0,0,431095,822229};
    while(scanf("%d",&n)!=EOF&&n)
        printf("%d %d\n",n,a[n]);
    return 0;
}

 

posted @ 2016-11-16 20:44  勿忘初心0924  阅读(1529)  评论(0编辑  收藏  举报