今天接触到一个词,错排,就是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];