CF708E Student's Camp

先设 \(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)\)

浙公网安备 33010602011771号