HDU1023_Train Problem II_卡特兰数

来源:互联网 发布:python 2.x.msi 编辑:程序博客网 时间:2024/06/14 04:28

Train Problem II

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9019    Accepted Submission(s): 4829


Problem Description
As we all know the Train Problem I, the boss of the Ignatius Train Station want to know if all the trains come in strict-increasing order, how many orders that all the trains can get out of the railway.
 

Input
The input contains several test cases. Each test cases consists of a number N(1<=N<=100). The input is terminated by the end of file.
 

Output
For each test case, you should output how many ways that all the trains can get out of the railway.
 

Sample Input
12310
 

Sample Output
12516796

大致题意:

进出火车站的轨道只有一条,但火车站内可以停无数的火车。求问n列火车全部进、出站的方法数。

实际上火车站相当于一个栈,每个火车就是一个元素。


大体思路:

这个题就是卡特兰数的应用。

首先假定第k辆车最后出栈,f(k) = f(k-1) + f(n+1-k) 。k可以取1到n。由此符合卡特兰数的特点。

卡特兰数的递推公式为:

h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (n>=2)
h(n)=h(n-1)*(4*n-2)/(n+1);
h(n)=C(2n,n)/(n+1) (n=0,1,2,...)
h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...)

#include<cstdio>int Table[101][30];int Len[101];int N;void GetTable (){Table[0][0]=Len[0]=1;for(int t=1;t<=100;t++){Table[t][0]=1,Len[t]=Len[t-1];for(int i=0;i<Len[t];i++)Table[t][i]=Table[t-1][i]*(4*t-2);for(int i=Len[t]-1,k=0,m=0;i>=0;i--)k=(1000*m+Table[t][i])%(t+1),Table[t][i]=(1000*m+Table[t][i])/(t+1),m=k;for(int i=0;i<Len[t];i++)if(Table[t][i]>999){Table[t][i+1]+=Table[t][i]/1000,Table[t][i]%=1000;if(i==Len[t]-1) Len[t]++;}}}int main(){//freopen("in.txt","r",stdin);GetTable();while(scanf("%d",&N)!=EOF){printf("%d",Table[N][Len[N]-1]);for(int i=Len[N]-2;i>=0;i--)printf("%03d",Table[N][i]);printf("\n");}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 四川人力资源和社会保障厅 重庆人力资源网 人力资源模块 甘肃省人力资源和社会保障厅 甘肃省人力资源社会保障厅 山东省人力资源社会保障厅 人力资源大模块 人力资源社会保障部 四川省人力和社会保障厅 淄博市人力资源和社会保障网 甘肃人力资源社会保障厅 重庆人力和社会保障网 淄博市人力资源社会保障网 山东省人力资源保障厅 贵阳人力资源网 重庆人力社会保障网 重庆人力资源 广州市人力资源社会保障局 甘肃人力资源保障厅 广州市人力资源和社会保障局 人力社会保障局社保网 深圳市人力资源社会保障局 贵阳人力资源 深圳市人力资源和社会保障局 重庆市人力资源和社会保障局 青岛市人力资源和社会保障局 罗德岛人力资源部 河南省人力资源和社会保障厅 重庆人力资源和社保局网 潍坊市人力资源和社会保障局 台山人才人力资源网 河南省人力资源社会保障厅 重庆市人力资源社会保障局 潍坊市人力资源社会保障局 广州市人力资源保障局 深圳市人力资源保障局 北京市人力资源和社会保障局 重庆市人力资源社会保障网 成都市人力资源和社会保障局 北京市人力资源社会保障局 吴江人力资源