现有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]);
}
}