题目:hdu2049
做法就是先从n本书中挑排错的m个,然后其他没有排错的都在原来的位置上,所以方案为1,然后求下这m本书的错排Dm就行了。
错排数的递推公式:Dn=(n-1)*(Dn-1+Dn-2),其中D1=0,D2=1.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,f[21],fac[21],m,T;
int main()
{
f[1]=0,f[2]=1;
fac[0]=fac[1]=1,fac[2]=2;
for(int i=3;i<=20;i++)
{
f[i]=(i-1)*(f[i-1]+f[i-2]);
fac[i]=fac[i-1]*i;
}
cin>>T;
while(T--)
{
cin>>n>>m;
ll x=fac[n]/fac[m]/fac[n-m];
cout<<f[m]*x<<endl;
}
return 0;
}
强啊