火车进出站问题是一个经典 的卡特兰数问题
可以使用组合公式求解
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;
}
浙公网安备 33010602011771号