错排问题,由于数据量很小,直接打表即可。
递推关系式: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;
}
继续加油。
本文介绍了一种解决错排问题的递推方法,通过打表的方式预先计算出小范围内的错排数,适用于数据量较小的情况。递推公式为dp[i]=(i-2)*(dp[i-1]+dp[i-2]),并提供了完整的C++代码实现。
&spm=1001.2101.3001.5002&articleId=105459183&d=1&t=3&u=fd69f2147761440fae41f548b6679336)
347

被折叠的 条评论
为什么被折叠?



