题解
2024-09-12 21:59:13
发布于:上海
27阅读
0回复
0点赞
这是著名的错排问题,设 D(n) 表示n封信全装错的情况,根据题意,有:
那么,由递推可得:
所以,可以写出递推代码:
#include<iostream>
using namespace std;
long long dp[23]={1,0};
int main(){
int n;
cin>>n;
for(int i=2;i<=n;i++)dp[i]=(dp[i-1]+dp[i-2])*(i-1);
cout<<dp[n]<<endl;
return 0;
}
或者:
#include<iostream>
using namespace std;
long long a=1,b=0,c;
int main(){
int n;
cin>>n;
for(int i=2;i<=n;i++){
c=(a+b)*(i-1);
a=b,b=c;
}
cout<<c<<endl;
return 0;
}
这里空空如也
有帮助,赞一个