题目大意
给定一个\(W*H\)的方格矩阵。和\(n\)的小方格阵,每个覆盖了左下角为\(x_{i1},y_{i1}\),右上角为\(x_{i2},y_{i2}\)的方格。
每一步会等概率随机选择一个方格阵(包括被染色的),把它全部涂黑,问把\(W*H\)的方格矩阵全部涂黑的期望步数是多少? 题目链接 ## 思路 考虑一个简化模型,\(n\)个方块,每次等概率随机染黑一个,问期望步数是多少?
设\(f[i]\)为已经染黑了\(i\)个方格后,再全部染黑的期望步数。
那么已经染黑了\(i\)个的情况下,有\(\frac{n - i}{n}\)的概率选择一个没有被染黑的,有\(\frac{i}{n}\)选择了一个已经被染黑的方块 即\(f[i] = 1+ \frac{n - i}{n}*f[i+1] + \frac{i}{n}f[i]\) 化简后\(f[i] = \frac{n}{n-i} + f[i+1]\) 这个式子也可以感性理解,如果每次都能选到未被涂黑的格子,那么\(f[i] = 1 + f[i+1]\),但事实我们未必每次都会选到,所以需要额外花费几次。
那么这一题也是这种思路,只不过此时的\(i\)是状态压缩含义,表示选择了哪些方格阵。
\[f[i] = \frac{i.count}{n}*f[i] + \frac{1}{n}\sum f[i << (1<<j))]\]
其中\(i.count\)是\(i\)中\(1\)的个数(即已经染过的方格阵),\(j\)是未被染黑的方格阵。
由于坐标较大,所以我们需要离散化点的坐标。
而且为了防止常数过大,用bitset代替了离散后的矩阵(每一位的\(0,1\))代表这个格子有没有被染色。
我们保存一下每一个方格阵会染色哪些方格,然后就dfs遍历所有状态。
代码
1 |
|
- 本文作者: 水蓝络合物
- 本文链接: https://miku39393939.github.io/2022/04/24/ICPC2022KunMingB/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!