• 概率期望题(期望 DP)做题记录


    概率期望题(期望 DP)做题记录

    P3830 [SHOI2012]随机树

    难点在于第二问:生成树的期望深度。

    不 wei zhuo 捏,设 \(dp_{i,j}\) 表示已经有了 \(i\) 个叶子结点,深度大于 \(j\) 的概率。

    考虑枚举一棵子树的大小,转移方程如下:

    \[dp_{i,j}=\sum_{k=1}^{i-1}\dfrac{dp_{k,j-1}+dp_{i-k,j-1}-dp_{k,j-1}\times dp_{i-k,j-1}}{i-1} \]

    上面分子的部分就是加到一棵子树的概率减去重复的情况,然而我们发现这样仍然有重复情况。

    考虑每一种深度情况,即左右子树分别为 \((1,i-1),(2,i-2),\dots,(i-1,1)\) 的情况的概率,可以将整棵树用加点方式 \(LRLLR\dots RLRLL\) 类似的序列表示出来。

    它是一个有 \(k\)\(L\)\(i-k\)\(R\) 组成的操作序列,那么总共有 \(\dfrac{(i-2)!}{(k-1)!(i-k-1)!}\) 中不同的序列。

    考虑计算生成一棵 \(n\) 个点的数的方案数:第一次只有 \(1\) 中选择,第二次有 \(2\) 种选择,……那么方案数就是 \((n-1)!\)

    同理,给定左右子树大小,生成树的方案数是 \((k-1)!(i-k-1)!\) 的。

    个上面的式子结合起来会发现方案数等于 \((i-2)!\),竟然与 \(k\) 无关!也就是说,无论左右子树到底多大,方案数都是相同的,所以有 \(\dfrac{1}{i-1}\)

    P3239 [HNOI2015]亚瑟王

    写了两个假算,终于改对了。

    首先肯定考虑将每张牌打出的概率算出来,每一轮考虑过来。

    一开始打的假算考虑的是计算在当前面对第 \(i\) 轮第 \(j\) 张牌时,这一轮前面的牌都没有选择,自己选择的概率

    发现这样在前面的牌被轮空的时候,难以计算选择这张牌的概率,所以需要记录前面被轮空了几张牌。

    \(dp_{i,j}\) 表示在整一局游戏中,在前 \(i\) 张牌中,选择了 \(j\) 张牌的概率。

    面临第 \(i\) 张牌,前面已经选择了 \(c\) 张牌时,选择 \(i\) 的概率为:

    \[dp_{i-1,c}\times (1-p_i)^{r-c-1}\times p_i \]

    意思是前面有 \(r-c-1\) 次面临 \(i\) 的机会都没有选择,这一次选择了。每次算完概率后直接累加答案。

    \(dp\) 数组的转移方程为:

    \[dp_{i,c}=dp_{i-1,c}\times (1-p_i)^{r-c}+dp_{i-1,c-1}\times \left(1-(1-p_i)^{r-c+1}\right) \]

    初始状态:\(dp_{0,0}=1.0\)。目标状态:整个数组。

    每次计算幂会增加一大把常数,可以预处理 \((1-p_i)\) 的幂次,复杂度 \(\mathcal{O(Tnr)}\) 转移。

  • 相关阅读:
    Access restriction on class due to restriction on required library rt.jar?
    Why “no projects found to import”?
    MySQL
    您对无法重新创建的表进行了更改或者启用了“阻止保存要求重新创建表的更改”选项
    INTJINTJ——内向+直觉+思维+判
    豆瓣网案例分析报告
    如何使用Git
    如何在不到六个月的时间内成为一个开发者
    关于网站编程Alex
    string
  • 原文地址:https://www.cnblogs.com/EricQian/p/16115226.html
Copyright © 2020-2023  润新知