【转】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;
}

  

posted @ 2015-08-20 11:46  _SunDaSheng  阅读(185)  评论(0编辑  收藏  举报