卡特兰数
卡特兰数的公式为h(n)=C(2n,n)÷(n+1)!
展开来就是h(n)=2n!÷(n+1)!÷n!
本题的思路
根据公式如果直接来算2n!,n最大为18,开long long也会爆,那么不妨在计算过程中进行一些优化。
首先被除数2n!和n!都有n!,那么可以直接不算。
然后部分代码为:
for(int i=n+2;i<=2*n;i++)
sum*=i
for(int i=2;i<=n;i++)
sum/=i;
这样还是不能AC,那么怎么优化呢?
我们不妨想当此循环i为2的倍数时,那么在之后除以
(n+1)! 时还会除以 i÷2 的值,那么这种i 就干脆只乘以 2,那么就极大减小了sum 所记录的值的防止爆空间。根据此思路就完成了AC代码
for(int i=n+2;i<=2*n;i++)
{
if(i%2==0)
sum*=2;
else
sum*=i;
}
for(int i=2;i<=n;i++)
if(i*2<n+2)
sum/=i;
防止直接抄题解就只有部分代码。