错排问题,由于数据量很小,直接打表即可。
递推关系式:dp[i] = (i-2)*(dp[i-1]+dp[i-2]),dp[1]=0,dp[2]=1。(注意使用 __int64 类型)
#include <iostream>
using namespace std;
const int MAXN = 25;
__int64 dp[MAXN];
int main()
{
dp[0] = dp[1] = 0;
dp[2] = 1;
for (int i = 3; i <= 20; i++) //打表
{
dp[i] = (i - 1) * (dp[i - 1] + dp[i - 2]);
}
int n;
while (cin >> n)
{
cout << dp[n] << endl;
}
return 0;
}
继续加油。