组合数
组合恒等式:
可得:
C[i][j] = C[i][j-1] +C[i-1][j-1];
此式可用于递归算法,卡特兰数问题等等
卡特兰数的一个公式:
h[n]=C[2n,n]−C[2n,n−1](n=0,1,2,...)
典例:求出栈序列的所以情况:
#include<cstdio>
#define MAX_N 20
#define ll long long
using namespace std;
int n;
ll c[MAX_N*2][MAX_N];
int main(){
scanf("%d",&n);
for(int i=1;i<=2*n;i++)
{
c[i][0]=c[i][i]=1;
for(int j=1;j<i;j++)
{
c[i][j]=c[i-1][j]+c[i-1][j-1];
}
}
printf("%lld",c[2*n][n]-c[2*n][n-1]);
return 0;
}