HDU 2049
Posted lukelmouse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 '
'
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的主要内容,如果未能解决你的问题,请参考以下文章