HDU 2049
简单错排
#include <iostream>
#include <cstdio>
#include <algorithm>
#define LL __int64
using namespace std;
LL Cnk[25][25];
LL Dn[25];
void initial(){
for(LL i=1;i<25;i++){
Cnk[i][0]=1;
for(LL j=1;j<=i;j++){
if(j==1)
Cnk[i][j]=i;
else
Cnk[i][j]=Cnk[i][j-1]*(i-j+1)/j;
}
}
Dn[0]=1;
Dn[1]=0; Dn[2]=1;
for(LL i=3;i<25;i++)
Dn[i]=(i-1)*(Dn[i-2]+Dn[i-1]);
}
int main(){
initial();
int T,n,m;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
LL ans=Cnk[n][n-m]*Dn[m];
printf("%I64d\n",ans);
}
return 0;
}

浙公网安备 33010602011771号