组合数

组合恒等式:

 

 

 

可得:

  C[i][j] = C[i][j-1] +C[i-1][j-1];

  此式可用于递归算法,卡特兰数问题等等

 

卡特兰数的一个公式:

  h[n]=C[2n,n]C[2n,n1](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;
}

 

 

posted @ 2021-03-26 14:25  助手的fork  阅读(55)  评论(0编辑  收藏  举报