P1044 栈
进栈次序是 1,2,3,...,n,求出栈排列数。
卡特兰数入门题
1.递推公式
$F[n]=(F[0]*F[n-1]+F[1]*F[n-2]+...+F[n-1]*F[0])$
#include<bits/stdc++.h> using namespace std; int f[50],n; int main() { scanf("%d",&n); f[1]=f[0]=1; for(int i=2;i<=n;i++) for(int j=0;j<i;j++) f[i]+=f[j]*f[i-j-1]; printf("%d ",f[n]); return 0; }
2.递推公式
$h(n)=h(n-1)*(4*n-2)/(n+1)$
3.组合公式
${h(n)}=frac{inom{2n}{n}}{(n+1)}$
4.组合公式
$h(n)=inom{2n}{n}-inom{2n}{n-1}$
#include<bits/stdc++.h> using namespace std; int c[100][100],n; int main() { scanf("%d",&n); for(int i=1;i<=n*2;i++) c[i][1]=c[i][i]=1; for(int i=1;i<=n*2;i++){ for(int j=1;j<i;j++) c[i][j]=c[i-1][j]+c[i-1][j-1]; } printf("%d ",c[2*n][n]-c[2*n][n-1]); return 0; }
推荐播客:http://www.cnblogs.com/COLIN-LIGHTNING/p/8450053.html