您的位置:首页 > 其它

HDU2049----不容易系列之(4)——考新郎

2013-08-21 14:56 357 查看
基于HDU2048,用递推公式:a[i]=(i-1)*(a[i-1]+a[i-2]),算出m个人有多少种错排,然后再乘以C(n,n-m),就是总共有多少种错排方法了。

#include <stdio.h>
#define LL __int64

int main()
{
LL t,n,m;
LL i,a[25],b[25];
a[1]=0,a[2]=1,b[1]=1;
for(i=3;i<=20;i++)
a[i]=(i-1)*(a[i-1]+a[i-2]);
for(i=2;i<=20;i++)
b[i]=b[i-1]*i;
scanf("%I64d",&t);
while(t--)
{
scanf("%I64d%I64d",&n,&m);
if(m==n)
printf("%I64d\n",a
);
else
{
LL k=1;
for(i=0;i<n-m;i++)
k*=(n-i);
printf("%I64d\n",a[m]*k/b[n-m]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: