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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值