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\n",f[n]); return 0; }
2.递推公式
$h(n)=h(n-1)*(4*n-2)/(n+1)$
3.组合公式
${h(n)}=\frac{\binom{2n}{n}}{(n+1)}$
4.组合公式
$h(n)=\binom{2n}{n}-\binom{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\n",c[2*n][n]-c[2*n][n-1]); return 0; }
推荐播客:http://www.cnblogs.com/COLIN-LIGHTNING/p/8450053.html
本文探讨了P1044栈问题中特定的出栈序列计数方法,通过两种不同的递推公式及组合数学中的卡特兰数公式来解决这一问题。文中提供了两段C++代码实现,一种直接使用递推公式,另一种利用组合公式计算卡特兰数。
323

被折叠的 条评论
为什么被折叠?



