火车进出站问题是一个经典 的卡特兰数问题
可以使用组合公式求解
f[N]=C(2n,n)/(n+1);
#include<iostream> using namespace std; int n; int a[10000]; void mul(int a[],int b) { a[1]*=b; for (int i=2;i<=a[0];i++) { a[i]=a[i]*b; a[i]+=a[i-1]/10; a[i-1]%=10; } while (a[a[0]]>=10) { a[++a[0]]=a[a[0]-1]/10; a[a[0]-1]%=10; } } void div(int a[],int b) { for (int i=a[0];i>1;i--) { a[i-1]+=(a[i]%b)*10; a[i]/=b; } a[1]/=b; while (a[a[0]]==0&&a[0]>1) a[0]--; } void print(int a[]) { for (int i=a[0];i>0;i--) cout<<a[i]; cout<<endl; } int main() { cin>>n; a[0]=a[1]=1; for (int i=n+1;i<=2*n;i++) mul(a,i); for (int i=2;i<=n;i++) div(a,i); div(a,n+1); print(a); return 0; }