错排,n个数相互不对应的排法

来源:互联网 发布:java oopmap 编辑:程序博客网 时间:2024/04/30 04:33

今天接触到一个词,错排,就是n个人每个人有一个物品,保证每个人都分配到不是自己的东西,就是错排,

其实很简单,假设前当讨论到第i个时,假设前i-1个全部排错,而dii个人分配到它的物品,那么这个人无论与谁交换,都可以保证这i个人的物品都不是自己的,还有一种情况,就是前i个人有一个人拥有的是自己的物品,这时,dii个人与他交换物品,也可以保证这i个人的物品都不是自己的,

所以d[i] = (i-1)*dp[i-1]+dp[i-2];

d[i-2]可以理解为有一个人是对的,但剩下的i-2个人是错误的;

下面拓展一下i个人有j个人是正确的;

i个人有j个时正确的,有三种情况,

1:前i-1个人有j-1个正确,然后分配给第i个人他自己的物品。

2:前i-1个人有j个正确,分配给第i个人他自己的物品,然后再把第i个人和前i-1个人拥有不正确物品的人交换

3:前i-1个人,有j+1个人正确,分配给dii个人他自己的物品,然后和前i-1个人拥有正确物品的人交换

结果就是:

d[i][j] = d[i-1][j-1]+= (i-1)*(d[i-1][j] - d[i-2][j-1])+ (j+1)*d[i-1][j+1];


0 0
原创粉丝点击