解题报告-论对“期望”的理解

解题报告-论对“期望”的理解

致敬传奇期望王

这道题我写了 \(5\) 遍,每遍都没有思路,都是看题解或者自己之前的代码才写出来的。现在这里做一个这道题的总结,防止以后再出现这种情况。

首先,这题看起来就很线性,但是我们不能一上来就 \(f_i\) 表示前 \(i\) 个点的分数期望,会发现很难转移。

第一步:剖析题面。这道题的题意很清楚,性质也很明白,只有连续的段才能够贡献分数。所以我们设 \(f_i\) 表示以 \(i\) 结尾的段的期望分数。那么只用统计打出的结果为 \(1\) 的情况,因为 \(0\) 是无意义的。

而为什么 \(f_i\) 表示前 \(i\) 个点的分数期望是假的?这样没有利用好“连续段”这个性质,而这个题目又没有其它特殊的性质。所以我们得到了第一个要点:状态的设定要符合题目的性质。

第二步:考虑转移。设在 \(i-1\) 处有一个长度为 \(x\) 的连续段,那么在 \(i\) 处就会有 \(p_i\) 的概率出现一个长度为 \((x+1)\) 的连续段。那么,如果我们要由 \(i-1\) 的分数转移而来,很明显要加上 \(3x^2+3x+1\)。所以,设 \(f_{1,i}\) 表示以 \(i\) 结尾的段的期望长度,\(f_{2,i}\) 表示以 \(i\) 结尾的段的期望长度的平方,\(f_{3,i}\) 表示以 \(i\) 结尾的段的期望分数。那么 \(f_{1,i}=f_{1,i-1}\times p_{i},f_{2,i}=f_{2,i-1}+2f_{1,i-1}+1,f_{3,i}=f_{3,i-1}+3f_{2,i-1}+3f_{1,i-1}+1\)

而我卡在这个点上的原因是,我只想用 \(f_{3,i-1}\) 去转移 \(f_{3,i}\),这导致了有两个次项无法维护,从本质上公式就是一个不可维护的公式。所以我们得到了第二个要点:如果推得的公式表示中有未定义或不可求的变量,直接把这个变量设出来,另外维护。由于维护一个变量要设的另外变量一定比这个变量的次数低,所以无论怎么设,总能设到次数为 \(1\) 的情况,总有一个公式满足所有的维护。剩下的就是码量了。

第三步:统计答案。答案肯定不等于 \(\sum f_i\),但是我的第一个思路就假在这里,我一直想怎么直接用 \(f\) 得到答案。我们一步一步来,如果我们把答案拆成一堆增长量,也即 \(f_{i-1}\) 转移到 \(f_i\) 时增加的部分呢?那就很赏心悦目了:\(ans_i\) 表示期望的增长量,那么答案等于 \(\sum ans_i\)

为什么我会卡在这个点上?因为答案可能会有交集,导致可能会算重。与其先算一遍事后考虑繁琐的去重,不如一开始就用一个简单的状态表示转换一下。这个 \(\texttt{Trick}\) 在我写线段树优化 \(dp\) 的时候也遇到过,如果线段树上每一个结点都存的是其本身的 \(dp\) 值,那么在处理诸如 \(dp_r-l+r\) 的最大值的问题时就会很难处理。所以我们可以转换一下再存到线段树中。事实证明,这个线段树上的 \(\texttt{Trick}\) 是很通用的。

综上三点,用一句话概括:不要想一步登天。三个点都说的是转换。

posted @ 2024-12-12 20:50  KarmaticEnding  阅读(38)  评论(0)    收藏  举报