错排

现有n本书按照顺序摆放,现要求重新排列,使得新的书的顺序中每一本书都不在原来的位置,求有多少种排列方式?
定义:

考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排

将问题分为两个步骤

把n本书的错排操作数记为D(n)

步骤1

先从n本书里面任意选一本书,下标为m,将m进行错排,可以从n-1个位置里任意选一个位置为k,那么有
n-1种情况,此时编号为m的放到下标k位置,手里拿着下标为k的书
下面对下标为k的书进行错排

步骤2

下标为k的书有两种选择

  • 直接选择放在下标m位置
  • 从除了位置m以及位置k的剩下的n-2个位置中选择一个位置
    方法1完成后,完成了2个错排,还有D(n-2)个书的错排
    方法2也就是完成了1个错排,将n-1那么就变成了步骤1
    有n-1本书,手里拿着下标为k的书,把下标变成m,这本书不能放在下标为m的地方为D(n-1)

结论

  • 和组合数一起运用,n个元素有m数字错排

\[C_n^m * D_m \]

  • 全错配递推公式

\[D(n)= (n - 1) * [D(n - 1) + D(n - 2)] \\ D(1) = 0, D(2) = 1\]

模板

void getd(){
    d[1] = 0, d[2] = 1;
    for(int i = 3; i <= 26; i++){
        d[i] = (i - 1) * (d[i - 1] + d[i - 2]);
    }
}
posted @ 2019-11-18 20:18  Emcikem  阅读(408)  评论(0编辑  收藏  举报