首页 > 其他 > 详细

错排问题 && 洛谷 P1595 信封问题

时间:2019-10-05 18:36:34      阅读:56      评论:0      收藏:0      [点我收藏+]

传送门


一道裸的错排问题

错排问题

百度百科上这样

就是对于一个排列,每一个数都不在正确的位置上的方案数。n 个元素的错排数记为 D(n)。

公式

D(n)=(n−1)∗(D(n−2)+D(n−1))

推出公式(感性)

对于第n个数,放在k位置上。

而第k个数有两种情况:

  • 当第k个数放到n位置时,相当于把k和n交换了位置,对剩下的n-2个数没有任何影响,所以方案数为D(n-2)。
  • 当第k个数不放到n位置时,相当于k由原来的不能放在k位置变成了不能放在n位置,对k和剩下的n-2个数即这n-1个数都没有影响,所以方案数为D(n-1)。

所以对于每个k,都有D(n-1)+D(n-2)种排法。而k有n-1种选择,所以要乘上n-1,最终得出公式D(n)=(n-1)*(D(n-1)+D(n-2))。

其中,D(1)初始化为0,D(2)初始化为1。

AC代码

 1 #include<iostream>
 2 using namespace std;
 3 long long ans[25];
 4 int main()
 5 {
 6     int n;
 7     cin>>n;
 8     ans[1]=0;
 9     ans[2]=1;
10     for(int i=3;i<=n;i++) ans[i]=(i-1)*(ans[i-1]+ans[i-2]);
11     cout<<ans[n];
12     return 0;
13 }

 

错排问题 && 洛谷 P1595 信封问题

原文:https://www.cnblogs.com/yinyuqin/p/11625305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!