http://ac.jobdu.com/problem.php?cid=1040&pid=93
错排公式:f(n) = (n-1) * f(n-1) + (n-1) * f(n-2)
#include <stdio.h>
long long a[21];
int main()
{
a[1]=0;
a[2]=1;
int i,n;
for (i=3;i<=20;i++) //提前保存结果
{
a[i]=(i-1)*a[i-1]+(i-1)*a[i-2];
}
while (scanf("%d",&n)!=EOF) //输出
{
printf("%lld\n",a[n]);
}
return 0;
}