hdu2049 错排+组合问题

来源:互联网 发布:真的有迷你猪吗 知乎 编辑:程序博客网 时间:2024/05/29 10:43

原题链接:click here

题目大意:有n个新郎,其中有m个新郎找错了新娘,求发生这种情况有多少种可能。

解题思路:(1)从n个新郎里选择m个,总共有C(n,m)种选法。

(2)让m个新郎去错排,利用错排公式求出错排数a[m]。

(3)根据分步乘法原理可知,这种情况发生共有C(n,m)*a[m]种可能。

代码如下:

#include<stdio.h>int main(){    int t,n,m,i;    _int64 x,y,a[22]={0,0,1,2};    for(i=4;i<=20;i++)    {        a[i]=(i-1)*(a[i-1]+a[i-2]);    }    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&m);        for(x=1,i=n-m+1;i<=n;i++)            x=x*i;        for(y=1,i=1;i<=m;i++)            y=y*i;        printf("%I64d\n",x/y*a[m]);    }    return 0;}


原创粉丝点击