标签:个人 错排 using namespace 合数 art log pac else
从\(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;
}
标签:个人 错排 using namespace 合数 art log pac else
原文地址:https://www.cnblogs.com/lukelmouse/p/12303331.html