zoukankan      html  css  js  c++  java
  • 符号三角形

                                                          符号三角形

                                               Time Limit: 1000ms                                            Memory Limit: 32768KB
                                                                      64-bit integer IO format:      Java class name:
    符号三角形的 第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



    源代码:
    #include<iostream>
    using namespace std;
    #define MAX 25
    
    //打表,不打表会超时,因为回溯算法的时间复杂度是很高的。
    int q[MAX][MAX];
    int readc[MAX]={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};
    int main(){
            int n;
            while(cin>>n && n){
                    cout<<n<<" "<<readc[n]<<endl;
            }
            return 0;
    }

    打表代码:

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n;
    int a[30][30];
    int x,y,m;
    void dfs(int cnt)
    {
        if(cnt==n+1)
        {
            for(int i=n-1;i>0;i--)
                for(int j=1;j<=i;j++)
                    a[i][j]=a[i+1][j]^a[i+1][j+1];   //异或
            x=0;y=0;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=i;j++)
                {
                    if(a[i][j]==1)
                        x++;
                    else
                        y++;
                }
                if(x==y)
                    m++;
                return;
        }
        for(int i=0;i<=1;i++)
        {
            a[n][cnt]=i;
            dfs(cnt+1);
        }
    }
    int main()
    {
        while(scanf("%d",&n)&&n)
        {
            memset(a,-1,sizeof(a));
            m=0;
            dfs(1);
            printf("%d %d
    ",n,m);
        }
        return 0;
    }
  • 相关阅读:
    从汇编看c++中的placement operator new
    从汇编看c++的new和delete
    从汇编看c++中全局对象和全局变量
    javascript中的this
    好工具
    js压缩解压工具
    IE的documentMode属性
    77. sqlserver 锁表解决方式
    75. ID重新走过,备份表
    5. Java中序列化的serialVersionUID作用
  • 原文地址:https://www.cnblogs.com/q-c-y/p/5483521.html
Copyright © 2011-2022 走看看