CF596D Wilbur and Trees 题解
INFO 题意简述
有
不难发现任意时刻剩下来的树都是一个区间。这时候就可以从区间 dp 的角度去考虑。
我们不妨设

描出来的点是树根。内层的树和外层的树可以覆盖同一片区域。因此我们需要把这个也计入状态。
考虑我们究竟在求什么。假设一个随机变量
条件期望
已知
离散情况下的全期望公式。
其中
要证明这个命题,我们首先根据期望的定义将
利用乘法分配律外层的
交换内外的求和号并且提出
内层其实是全概率公式。其值等于
这就是
从含义上理解这个式子,就是通过分类讨论把
转移
我们需要通过合适的变量
我们发现,一旦我们确定要砍倒某棵树了,并且其倒下的方向确定,那么它连带带到的树和覆盖的位置也是确定的,这个部分可以
因此,我们不妨选取“先砍倒左侧/右侧的树和砍倒树的倒向”作为全期望公式中的
首先考虑如何计算
接下来我们需要计算
对于右侧的情况同理。
我们实际上是运用了全期望公式,把不好计算的不确定事件转化成好计算的确定性事件来求解。
错解二则
接下来说一个错误解法。
如果我们令
转移的时候仍然枚举先砍倒哪颗树。由于我们已经确定了内层树倒下的方向,因此此时砍倒两侧概率是
这个做法依旧试图使用全期望公式来计算答案。需要计算
此时钦定内层树倒向之后,其发生的概率也不是
因此,在设计概率类 dp 时需要注意这个问题。我们在设计状态的时候,计入状态的内容最好不要对未来产生影响,这个错解就是一个错误示范,因为它直接钦定了时间的结果,把概率变成了一个难以计算的条件概率。
而我们之前计入外层状态的“外层树的倒向”并不会对内层树的倒向产生影响,换言之,“外层树的倒向”和“内层先砍哪个及其倒向”是两个独立事件。
另一个值得一提的是 AndreiNet 的赛时做法 。不知道怎么过 pretests 的。
似乎他在考虑 dp 计算每一颗树最终左倒还是往右倒的概率,利用期望的线性性分到每一段,并且简单的将左侧树向右倒下和右侧树向左倒下的概率乘了起来。
实际他似乎认为相邻两棵树的倒下是独立事件(实际上并不是,左侧的树如果向左倒下,那么右侧树会“更有可能”向左倒下将左侧的树推倒)。
正确的直觉建立在正确的理解上面。如果你根本不知道自己在算什么东西就随便想当然的乱套结论,代码的正确性自然会出问题。
另外这场比赛的 pretest 这么弱吗?