CF708E Student's Camp

image

先设 \(D(i)\) 表示 \(k\) 次吹风中 \(i\) 次成功吹在特定行的概率,有

\[D(i)={k \choose i}p^i(1-p)^{k-i} \]

\(P(l,r)\) 表示某一行只剩下 \((l,r)\) 的砖块的概率,由于左右两边显然独立,于是我们有:

\[P(l,r) =D(l-1)D(m-r) \]

再设 \(f(i,l,r)\) 表示第 \(i\) 行剩下 \([l,r]\)的方块且建筑不倒的概率

接下来考虑如何从 \(i-1\) 行转移。

发现第 \(i\) 行剩下的方块要和 \(i-1\) 行有交,即

\[f(i,l,r)=P(l,r) \sum _{[l',r'] ∩[l,r] \neq \empty} f(i-1,l',r') \]

边界 \(f(0,1,m)=1\)

\[ans=\sum f(n,l,r) \]

发现复杂度爆了,还是太不牛了,考虑如何优化

在转移的时候不妨考虑问题的反面,即两个区间没有交集。容易发现只有两种情况,即 \(r'<l\) 或者 \(r<l'\)

\[f(l,r)=P(l,r)[\sum f(i-1,l',r') -\sum_{r'<l} f(i-1,l',r')]- \sum_{r<l'} f(i-1,l',r') \]

发现只要求出三个求和符号即可转移。

\[F(i)=\sum_{l\leq r}f(i,l,r) \]

\[L(i,x)=\sum\sum_{l \leq r < x} f(i,l,r) \]

\[R(i,x)=\sum_{x< l \leq r } f(i,l,r) \]

则有

\[f(i,l,r) = P(l,r) [F(i-1)-L(i-1,l)-R(i-1,r)] \]

事实上我们发现 \(L,R\) 是关联对称的,于是我们有:

\[L(i,x)=R(i,m-x+1) \]

我们记

\[S_L(i,r)=\sum_{l \leq r} f(i,l,r) \]

则有

\[L(i,x) = \sum_{r<x} S_L(i,r) \]

\[F(i)=\sum_r S_L(i,r) \]

考虑如何计算 \(S\) .

\[S_L(i,r)=\sum f(i,l,r) \]

\[=\sum_{l \leq r} P(l,r) [F(i-1)-L(i-1,l)-R(i-1,r)] \]

\[=D(m-r) \sum _{l \leq r} D(l-1)[F(i-1)-L(i-1,l)-R(i-1,r)] \]

\[=D(m-r)([F(i-1)-R(i-1,r)]\sum_{l \leq r} D(l-1)-\sum_{l \leq r} D(l-1)L(i-1,l) ) \]

这时我们发现 对于 \(D(l-1)\)\(D(l-1)L(i-1,l)\) 做前缀和即可实现 \(O(1)\) 转移,最后答案即为 \(F(n)\) ,边界是 \(S_L(0,m)=1\)

复杂度 \(O(nm+k)\)

posted @ 2025-03-27 07:55  houpingze  阅读(20)  评论(0)    收藏  举报