错排问题。
先从n对新人中找出n-m对找对新娘的人,然后把剩下的m对错位排列一下,然后乘法原理把两个数相乘即可。
n和m的范围不大,打表即可。
#include <cstdio> #include <iostream> using namespace std; int main() { int t,n,m,i,j; long long f[25],c[25][25]={{0,1}}; f[0]=1; f[1]=0; f[2]=1; for(i=3;i<=21;i++) f[i]=(i-1)*(f[i-1]+f[i-2]); for(i=1;i<=21;i++) for(j=1;j<=i+1;j++) c[i][j]=c[i-1][j-1]+c[i-1][j]; cin>>t; while(t--) { scanf("%d%d",&n,&m); cout<<c[n][n-m+1]*f[m]<<endl;; } return 0; }