码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 2049

时间:2020-02-13 14:58:36      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:个人   错排   using   namespace   合数   art   log   pac   else   

HDU 2049

思路

\(n\) 个人中选出\(m\)个人进行错排,即\({n \choose m}\),递推求组合数

\(m\)个人的错排公式\(f[m]=(m-1)(f[m-1]+f[m-2])\)

答案:\({n \choose m}f[m]\)

#include <bits/stdc++.h>
using namespace std;
const int N = 25;
#define endl '\n'
typedef long long LL;
LL f[N] = {0,0,1},C[N][N];
int c,n,m;
void init() {
    for(int i = 0;i < N; ++i) {//递推求组合数
        for(int j = 0;j <= i; ++j) {
            if(!j) C[i][j] = 1;
            else C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]);
        }
    }
    for(int i = 3;i < N; ++i) {// 递推求排列数
        f[i] = (i - 1) * (f[i - 1] + f[i - 2]);
    }
}
int main() {
    init();
    cin >> c;
    while(c --) {
        cin >> n >> m;
        cout << C[n][m]*f[m] << endl;
    }

    return 0;
}

HDU 2049

标签:个人   错排   using   namespace   合数   art   log   pac   else   

原文地址:https://www.cnblogs.com/lukelmouse/p/12303331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!