标签:
先找出m新郎来错排,剩下的n-m对就是正常的。所以是f(m)*c(m,n)
错排 f(n)=(n-1)*(f(n-1)+f(n-2))
c(m,n)=n!/(m!*(n-m)!)
#include <iostream> #include <cstring> using namespace std; long long dp[22]; long long f(int n) { if(dp[n]) return dp[n]; else return dp[n]=(n-1)*(f(n-1)+f(n-2)); } long long g(int n) { if(n==0) return 1; return n*g(n-1); } int main() { int t; cin>>t; memset(dp,0,sizeof(dp)); dp[1]=0; dp[2]=1; while(t--) { int n,m; cin>>n>>m; cout<<g(n)/g(n-m)/g(m)*f(m)<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/luosuo10/p/5263716.html