zoukankan      html  css  js  c++  java
  • 二叉树数

    二叉树数

    Description

    求由n个结点构成的不同的二叉树数.n<=100 每个节点均认为是等价的!

    Input

    输入一个整数n,表示结点数。

    Output

    输出对应的答案。

    Sample Input

    3
    

    Sample Output

    5
    

    HINT

    Source

    #include <bits/stdc++.h>
    using namespace std;
    int f[101][1000];
    int tmp[1000];
    void mul(int *c,int *a,int *b)
    {
        int l1=a[0],l2=b[0],l3;
        l3=l1+l2-1;
        for(int i=1;i<=l1;i++)
            for(int j=1;j<=l2;j++)
            {
                c[i+j-1]+=a[i]*b[j];
                c[i+j]+=c[i+j-1]/10;
                c[i+j-1]%=10;
            }
        while(c[l3+1]>0)
        {
            l3++;
            c[l3+1]+=c[l3]/10;
            c[l3]%=10;
        }
        c[0]=l3;        
    }
    void add(int *a,int *b)
    {
        int l;
        if(a[0]>b[0]) l=a[0];
        else l=b[0];
        for(int i=1;i<=l;i++)
        {
            a[i]+=b[i];
            a[i+1]+=a[i]/10;
            a[i]%=10;
        }
        while(a[l+1]>0)
        {
            l++;
            a[l+1]+=a[l]/10;
            a[l]%=10;
        }
        a[0]=l;
    }
    int main()
    {
        int n;
        memset(f,0,sizeof(f));
        cin>>n;
        f[0][0]=1,f[0][1]=1;
        f[1][0]=1,f[1][1]=1;
        for(int i=2;i<=n;i++)
        {
            f[i][0]=1,f[i][1]=0;
            for(int j=0;j<=i-1;j++)
            {
                memset(tmp,0,sizeof(tmp));
                mul(tmp,f[j],f[i-1-j]);
                add(f[i],tmp);
            }
        }
        for(int i= f[n][0];i>=1;i--)
        printf("%d", f[n][i]);
        return 0;
    }
    
  • 相关阅读:
    本周开发工作时间及内容
    自我介绍
    代码规范
    结对编程
    第二周总结
    20140227WPF学习笔记
    约瑟夫问题
    模式匹配KMP算法
    .NET开发之窗体间的传值转化操作
    北达软TOGAF9鉴定级别认证考试通知 北达软
  • 原文地址:https://www.cnblogs.com/LJA001162/p/12079213.html
Copyright © 2011-2022 走看看