1. 程式人生 > >杭電ACM 2049 不容易系列之(4)——考新郎

杭電ACM 2049 不容易系列之(4)——考新郎

利用錯排公式和排列組合公式

踩踩

最終結果就是

M個錯排*Cmn     其中m=M,n=M-N

#include <iostream>
using namespace std;
__int64	 Fac(int n){
__int64	 ans=1;
for(int i=1;i<=n;i++)
	ans=ans*i;
return ans;
}//n的階乘 
int main()
{
	int C;
	cin>>C;
	__int64 a[21];
	a[1]=0;
	a[2]=1;
	for(int i=3;i<=20;i++)
		a[i]=(a[i-2]+a[i-1])*(i-1);
	while(C--){
		int M,N;
		cin>>M>>N;
		cout<<Fac(M)/(Fac(M-N)*Fac(N))*a[N]<<endl;
	}
	return 0;
}