、

梦熊2026省选集训 Day6 T1

题意

给定 \(n\),\(a_1\cdots a_n\)。每一次在序列中随机选择一对连续的数,有 \(\frac{a_i}{a_i+a_{i+1}}\) 的概率保留第一个,有 \(\frac{a_{i+1}}{a_i+a_{i+1}}\) 的概率保留第二个,求 \(i\) 留到最后的概率。

\(n\leq 500\)。

思路

考虑朴素动规 \(f_{i,j},g_{i,j}\) 表示 \(i\) 如果想要到达 \(j\) (左/右)的概率。那么答案就是

\[\frac{f_{1,i}g_{i,n}\binom{i-1}{r-l}}{n!} \]

即考虑左右的操作顺序需要按照顺序才能够都杀了。转移的话通过枚举两侧的分界点可以做到 \(O(n^4)\)。但是这么做显然是不优秀的。动规优化一般要么优化状态要么优化转移。这里转移显然没有办法维护。我们发现算法的瓶颈在于我们每一次都需要维护一个分界点的新情况,那么也就是实际上需要多维护那个每一次分成若干个段的状态。

我们考虑能否维护另外的状态即一段一段的情况使得另一个可以直接推平。我们定义 \(f_{i,j,1/0}\) 表示 \(j\rightarrow i\) 的过程中是 \(j\) 和 \(i\) 向中间推和 从某个分界点先推到了 \(i\),然后 \(j\) 去干掉分界点。更特殊的,设 \(1\) 为最后一次合并是 \(l,r\) 合并,\(0\) 表示不是,那么就可以转移:

\[f_{i,j,1}=\sum_{k=i}^{j-1}f_{k+1,j,0}g_{i,k,0}p_{j,i}\binom{j-k-1}{j-i-1}\\ f_{i,j,0}=\sum_{k=i}^{j-1}f_{k,j,1}f_{i,k,0}\binom{k-i}{j-i-1}\\ g_{i,j,1}=\sum_{k=i}^{j-1}f_{k+1,j,0}g_{i,k,0}p_{i,j}\binom{j-k-1}{j-i-1}\\ g_{i,j,0}=\sum_{k=i}^{j-1}g_{i,k+1,0}g_{k+1,j,1}\binom{k-i}{j-i-1}\\ \]

其中 \(p_{i,j}\) 表示 \(i\) 打 \(j\) 的获胜概率。时间复杂度 \(O(n^3)\)。

posted @ 2026-09-24 14:42  tanghg  阅读(7)  评论(0)    收藏  举报