题目大意
有一个 $n \times m$ 的棋盘,每个格子要么是 0 要么是 1。每天等概率地选择一个 1 格子进行标记,若某时刻每行、每列都至少有一个格子被标记,则结束。求结束的期望天数。
$n,m \le 20,\ \ n \times m \le 200$
【50%】n,m<=8
设 $f[s1][s2]$ 表示行状态为 $s1$、列状态为 $s2$,到达结束的期望天数。
设总的 1 格子数量为 $tot$,那么对于当前状态,有 $t[s1][s2]$ 个 1 格子你选它不会改变当前状态,剩余 $tot-t[s1][s2]$ 个 1 格子则会改变当前状态。
则 $f[s1][s2]=\frac{t[s1][s2]}{tot}(f[s1][s2]+1)+\sum\frac{1}{tot}(f[s1’][s2’]+1)$,移一下项就解出来了。
【100%】n,m<=20, n*m<=200
设 $F(i)$ 表示经过 $i$ 次操作结束的概率,$P(i)$ 表示经过 $i$ 次操作仍未结束的概率,则
考虑如何计算 $P(i)$。既然未结束,则一定是漏掉了一些行或列。漏掉的意思是那些行和那些列所包含的 1 格子永远选不到。设行列状态为 $S$,设选中该状态包含的 1 格子的概率为 $p(S)$(这个是小写),则容斥一下可得到
所以
等比数列公式一下可得
设总的 1 格子数量为 $tot$,$S$包含的 1 格子数量为 $t[S]$,则
设使 $t[S]=X$ 的状态 $S$ 数量为 $num[X]$(这里的数量是指容斥后的数量,即奇数减偶数),则
求 $num[X]$ 则是一个简单状压dp,不赘述。
代码
1 |
|