其他分享
首页 > 其他分享> > hdu2049 不容易系列之(4)——考新郎(组合,错排)

hdu2049 不容易系列之(4)——考新郎(组合,错排)

作者:互联网

1.先从n个新郎中选出m个,即Cnm
2.再算出m个新郎的错排数,即f(m)
组合的递推公式以及错排公式的推导参考:Hdu 2049解题报告
这里我将组合的求法由递归改为了递推

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll c[25][25],f[25]={0,0,1};
 5 void Init(){
 6     for(int n=0;n<=20;n++)//Cn 0和Cn n都置为1
 7         c[n][0]=c[n][n]=1;
 8     for(int n=1;n<=20;n++)//Cn 1到Cn n-1由递推公式求得
 9         for(int m=1;m<n;m++)
10             c[n][m]=c[n-1][m-1]+c[n-1][m];
11     for(int i=3;i<=20;i++)//规模为i的错排的递推
12         f[i]=(i-1)*(f[i-1]+f[i-2]);
13 }
14 int main(){
15     Init();//初始化组合、错排表
16     ll t,n,m;cin>>t;
17     while(t--){
18         cin>>n>>m;
19         cout<<c[n][m]*f[m]<<endl;
20     }
21     return 0;
22 }

 

标签:25,hdu2049,ll,long,错排,新郎,递推
来源: https://www.cnblogs.com/Kanoon/p/12464649.html