组合数学模板

int anr(int n,int r) { //求n的r排列
    int res=1;
    for(int i=0;i<r;i++) res*= n-i;
    return res;
}
int cnr(int n,int r) { //求n的r组合
    int res = anr(n,r);
    for(;r;r--) res /= r;
    return res;
}
//{1,2,3,--,n}的r组合a[i](i=1 to r)在其所有r组合中的字典序号
int c_lexorder(int *a,int n,int r) {
    int res = cnr(n,r);
    for (int i = 0; i < r; ++i) {
        res -= cnr(n-a[i],r-i);
    }
}

 

posted @ 2013-04-27 17:58  小仪在努力~  阅读(167)  评论(0编辑  收藏  举报