【基础练习】【卡特兰数】栈 2003年NOIP全国联赛普及组第三题 题

卡特兰数,这是一向掌握不大熟练的内容,今天借NOIP2003普及组的第三题来总结一下。当然由于原题数据弱抱,不需要高精。如果有时间我会不断补充这篇文章里的内容。

二话不说上代码

//Catalan#include<iostream>using namespace std;long long n,f[20]={0};/*NO.1 f[n+1]=f[i]*f[n-i]from 0 to n plus f[0]=1 int main(){cin>>n;f[0]=1;f[1]=1;for (int i=2;i<=n;i++){for (int j=0;j<i;j++){f[i]+=f[j]*f[i-j-1];}}cout<<f[n];return 0;} *//*NO.2 f[n+1]=((4n+2)*f[n])/(i+2) f[0]=1int main(){cin>>n;f[0]=1;for (int i=0;i<n;i++) f[i+1]=(4*i+2)*f[i]/(i+2);cout<<f[n];return 0;}*//*NO.3 WRONG!right when n<=9 f[n]=(n+2 multi to 2n)/(n!) even use son*(n+i)/i is also wrong,refering to real number(double)int main(){cin>>n;int son=1;for (int i=n+2;i<=2*n;i++) son*=i;for (int i=n;i>=2;i–) son/=i;cout<<son;}*/

这里提供了三种基本的卡特兰数计算方法,,最好的当然应该是第二种。第三种是错误的,但如果有更好的解决方法欢迎提供,因为它不是递推而是直接求。

int(longint)在n<=18的时候没问题,再大就要用long long(int64) 范围是9223372036854775807,即922亿亿 第30个卡特兰数是一亿亿 所以高精是非常重要的

有一个很好的博客总结了一些资料

旅行,其实是需要具有一些流浪精神的,

【基础练习】【卡特兰数】栈 2003年NOIP全国联赛普及组第三题 题

相关文章:

你感兴趣的文章:

标签云: