hdu1023

来源:互联网 发布:爱淘宝网红包 编辑:程序博客网 时间:2024/04/26 21:26
//这个题目是卡塔兰数列的经典题目可以直接用卡塔兰公式,然后大数相乘,因为数据不大,所以还是比较好用的,注意在做的过程中感觉打表你法比较方便
//卡塔兰数列,在很多问题都是非常实用的
#include <stdio.h>#include <string.h>int c[102][1000],Y[102];void multy(int a[1000],int b[1000],int n,int la,int lb){int i,j;for(i=0;i<=la;i++)for(j=0;j<=lb;j++){c[n][i+j]+=a[i]*b[j];}for(i=0;i<=la+lb;i++){ c[n][i+1]+=c[n][i]/10; c[n][i]=c[n][i]%10;}for(i=la+lb+10;i>=0;i--)if(c[n][i]!=0)break;Y[n]=i;}int main(){int a[1000],b[1000];int i,j,k,l,n;memset(c,0,sizeof(c));c[0][0]=1;c[1][0]=1;c[2][0]=2;c[3][0]=5;Y[0]=0;Y[1]=0;Y[2]=0;    Y[3]=0;for(i=4;i<=100;i++){for(j=0;j<i;j++){memset(a,0,sizeof(a));memset(b,0,sizeof(b));for(k=Y[j];k>=0;k--)a[k]=c[j][k];for(k=Y[i-j-1];k>=0;k--)b[k]=c[i-j-1][k];            multy(a,b,i,Y[j],Y[i-j-1]);}}while(scanf("%d",&n)!=EOF){        for(i=Y[n];i>=0;i--)printf("%d",c[n][i]);printf("\n");}return 0;}

0 0
原创粉丝点击