• 卡特兰数简单应用


    f[n+1]=(4*n+2)/(n+2)*f[n];

    由f[n]=C(n,2n)-C(n+1,2n)推导

    然后就是一些大数乘法和大数除法了。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    #include <math.h>
    #include <map>
    #include <queue>
    #include <sstream>
    #include <iostream>
    using namespace std;
    #define INF 0x3fffffff
    #define base 10000
    
    int g[110][110];
    
    void mmul(int s[],int tmp,int t[])
    {
        for(int i=0;i<100;i++)
        {
            t[i]=s[i]*tmp;
        }
        for(int i=0;i<100;i++)
        {
            t[i+1]+=t[i]/base;
            t[i]%=base;
        }
    }
    
    void mdiv(int s[],int tmp)
    {
        int d;
        for(int i=100;i>=0;i--)
        {
            d=s[i]%tmp;
            s[i]=s[i]/tmp;
            if(i!=0)
                s[i-1] += d*base;
        }
    
    }
    
    
    int main()
    {
        //freopen("//home//chen//Desktop//ACM//in.text","r",stdin);
        //freopen("//home//chen//Desktop//ACM//out.text","w",stdout);
        int n;
        g[1][0]=1;
        for(int i=2;i<=100;i++)
        {
            int up=4*(i-1)+2;
            mmul(g[i-1],up,g[i]);
            int down=i+1;
            mdiv(g[i],down);
            //mmul(g[i],i,g[i]); 这一步看要不要阶层
        }
        while(scanf("%d",&n)&&n)
        {
            int i;
            for(i=100;i>=0;i--)
                if(g[n][i]!=0) break;
            printf("%d",g[n][i]);
            i--;
            for(;i>=0;i--)
                printf("%04d",g[n][i]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    C# MVC解决跨站请求伪造(appscan)
    .net中关于Url传参问题
    二月项目完成小结
    sql 获取时间
    ajax提交form表单
    C# 视图遍历List数组
    C#遍历指定文件夹中的所有文件
    C#关于文件的操作
    .net 文件上传到服务器【转】
    Server.MapPath获取各级目录【转】
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/3199311.html
Copyright © 2020-2023  润新知