• OpenJudge 2990:符号三角形 解析报告


    2990:符号三角形

    总时间限制: 
    1000ms      
    内存限制: 
    65536kB
    描述

    符号三角形的第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“,2个异号下面是”-“ 。计算有多少个不同的符号三角形,使其所含”+“ 和”-“ 的个数相同。

    n=7时的1个符号三角形如下:
    + + - + - + +
    + - - - - +
    - + + + -
    - + + -
    - + -
    - -
    +

    输入

    每行1个正整数n<=24,n=0退出.
    输出

    n和符号三角形的个数.
    样例输入
    15
    16
    19
    20
    0
    
    样例输出
    15 1896
    16 5160
    19 32757
    20 59984
    

    分析:

    这道题其实就是道水题.当然如果数据再强一点.那就会很难了.不过Openjudge里的数据.这道题很水.而且,就是样例.所以这里可以采用暴力枚举位数.之后再加进行判断.如果这个枚举的可以,那就可以.恩.其实就是这样.不过.我在判断的时候加了个如果某个符号总数已经大于总位数的一半那就不行.这个小剪枝其实还是有点用的.具体还有什么其他的没想出来.希望各位dalao写完之后提些建议//.

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int line[25][25],cnt,sum,num[2],ans,n,num_1[2];
    int DFS(int x);
    int DFS_1(int x)
    {
        if(x>n)
        {
            num[1]=num_1[1];num[0]=num_1[0];
            if(DFS(2))ans++;
            return 0;
        }
        for(int i=0;i<=1;++i)
        {
            line[1][x]=i;
            num_1[i]++;
            DFS_1(x+1);
            num_1[i]--;
        }
        return 0;<
    }
    int DFS(int x)
    {
        if(x==n){
            line[x][1]=(line[x-1][1]==line[x-1][2] ? 1:0);
            num[line[x][1]]++;
            if(num[1]==num[0])return 1;
            return 0;
        }
        for(int i=1;i<=n-x+1;++i)
        {
            line[x][i]=(line[x-1][i]==line[x-1][i+1] ? 1:0);
            num[line[x][i]]++;
            if(num[line[x][i]]>(sum/2+1))return 0;
        }
        if(!DFS(x+1))return 0;
        return 1;
    }
    int main()
    {
        while(1)
        {
            scanf("%d",&n);
            if(!n)break;
            sum=0;ans=0;
            for(int i=1;i<=n;++i)sum+=i;
            num[1]=0;num[0]=0;
            DFS_1(1);
            printf("%d %d
    ",n,ans);
        }
        return 0;
    }
    
  • 相关阅读:
    jQuery之第4章 jQuery中的事件和动画
    jQuery之第3章 jQuery中的DOM操作
    jQuery之第2章 jQuery选择器
    输入一组学生的姓名和成绩,根据成绩降序排名。
    抽象类和接口
    pingpong线程输出问题
    sql优化
    [leedcode 242] Valid Anagram
    [leedcode 241] Different Ways to Add Parentheses
    [leedcode 240] Search a 2D Matrix II
  • 原文地址:https://www.cnblogs.com/uncle-lu/p/6007236.html
Copyright © 2020-2023  润新知