【vijos1286】座位安排

Description

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

Solution

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

那么选择的期望次数为:
li=1(1p)i1ip=pli=1(1p)i1i (l)

M=li=1(1p)i1i ,则 (1p)M=li=1(1p)ii

那么 (1p)MM=pM=l(1p)lli=0(1p)i
=l(1p)l((1p)l+11(1p)1)

因为 l ,所以 pM=1p pM=1p

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

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

所以最终答案就是 Ckn×m/

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

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

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

这里压缩状态要以小的那个压缩。

posted @ 2017-02-24 19:27  sadstone  阅读(51)  评论(0编辑  收藏  举报