您的位置:首页 > 其它

hdu 2049 不容易系列之(4)——考新郎

2013-08-10 14:45 218 查看
 首先,从n个里面选出m个(不排序),一共有C(n,m)个,

即:    n!/(n-m)!/m!;

然后在这选出的m个数中需要用到错排,

详见http://blog.csdn.net/xzf19930910/article/details/9875487

即:f[i]=(i-1)*(f[i-1]+f[i-2]);

代码如下:

#include <iostream>
#include <cstdio>
#include<cstring>
#include <cmath>
using namespace std;

int main()
{
int n,m,i,j,c;
long long f[22],s[22];
f[0]=1;

for(i=1;i<22;i++)
f[i]=f[i-1]*i;
s[1]=0;
s[2]=1;
for(i=3;i<22;i++)
s[i]=(i-1)*(s[i-1]+s[i-2]);
cin>>c;
while(c--)
{
cin>>n>>m;
cout<<s[m]*(f
/f[m]/f[n-m])<<endl;;
}

return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu