【转】HDU-2049-不容易系列之(4)——考新郎:错排+组合
现对于上一道”神、上帝以及老天爷” 只求M个数的错排数 不同的本题 是求N个数中M的错排数
先从N个数中 取M个数有CnM种取法 再乘上M的错排数就是答案 错排数的求法参考上一篇文章
其中组合公式如下
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int main()
{
long long a[21]={0, 0, 1}; // a[i]表示i个数的错排种类
long long b[21]={1, 1, 2}; // b[i]表示i的阶乘
for(int i=3; i<21; i++)
a[i]=(i-1)*(a[i-1]+a[i-2]);
for(int i=3; i<21; i++)
b[i]=b[i-1]*i;
int C;
cin>>C;
while(C--)
{
int N, M;
cin>>N>>M;
long long CnM=b[N]/b[N-M]/b[M];// N 个数的M组合数
cout<<CnM*a[M]<<endl;
}
return 0;
}

浙公网安备 33010602011771号