您的位置:首页 > 其它

【vijos1286】座位安排

2017-02-24 19:26 239 查看

Description

考场里的座位恰好有n行m列,并且恰好有n*m位考生在这个考场里面考试,也就是说,所有的座位上都有考生。hzy根据学校记载,有k位考生可能作弊,因此hzy不能让他们之中的任何两个人做在相邻的座位上!所谓相邻的座位,即在同一行相邻列或者在同一列的相邻行的座位。hzy准备这样安排座位,首先随机选择一种方案,如果这种方案是合法的,就用这种方案,否则重新选择。你的任务是计算,他得到一个合法方案时,需要的期望选择次数。

传送门

Solution

设每次选择合法方案的概率为p=合法方案数/Ckn×m。

那么选择的期望次数为:

∑li=1(1−p)i−1⋅i⋅p=p∑li=1(1−p)i−1⋅i (l→∞)

设M=∑li=1(1−p)i−1⋅i,则(1−p)M=∑li=1(1−p)i⋅i。

那么(1−p)M−M=−pM=l⋅(1−p)l−∑li=0(1−p)i

=l⋅(1−p)l−((1−p)l+1−1(1−p)−1)。

因为l→∞,所以−pM=−1p,pM=1p。

当然期望步数也可以不这样算(上面的没懂没有关系)。

我们设期望步数为x,那么我们有方程x=p+(1−p)(1+x),解得x=1p。(显然比上面的式子简单多了,要理解也很容易)

所以最终答案就是Ckn×m/合法方案数。

现在我们考虑怎么求这个方案数。

设fi,j,S表示第i行的作弊学生状态为S,共有j个作弊学生的方案数,转移显然。

一开始把第一行的f初始化一下即可。

这里压缩状态要以小的那个压缩。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: