「REMAKE系列」概率期望dp篇

常见模型技巧总结

概率正推,期望倒推

简单概率期望

需要一些小观察、推式子的题目

树图上概率期望

习题

洛谷


P6154 游走

普及+/提高图论概率期望

评测记录

题意

B 城可以看作一个有 \(n\;(n\leq 10^5)\) 个点 \(m\) 条边的有向无环图可能存在重边

zbw 在 B 城随机游走,他会在所有路径中随机选择一条路径,选择所有路径的概率相等。路径的起点和终点可以相同。

定义一条路径的长度为经过的边数,你需要求出 zbw 走的路径长度的期望,答案对 \(998244353\) 取模。

思路

  • 注意题目要求的东西,路径长度的期望等于 总长度 / 路径数。
  • \(f_i\) i 结尾的路径长度总和, \(g_i\) i 结尾的路径条数。
  • \(g_i = \sum{edge(j,i)} g_j\) \(f_i = \sum_{edge(j,i)} f_j + g_j\)
  • 边界 \(g_i = 1\) ,答案等于 \(\frac{\sum_i f_i}{\sum_i g_i}\) ,快速幂做逆元。

P1297 [国家集训队]单选错位

普及+/提高

评测记录

题意

\(n\leq 10^7\) 个选择题,每个选择题有 \(a_i\) 个答案,每道题的答案是上一道题的正确答案,询问期望做对的题目数量。

思路

  • 分类讨论:
    • \(a[i]=a[i-1]\) ,和随机选答案做对期望一样,\(\frac{1}{a_i} \times 1 = \frac{1}{a_i}\)
    • \(a[i] > a[i - 1]\) ,有 \(\frac{a_{i-1}}{a_i}\) 的概率答案在前一个范围内的数,在 i - 1 项有 \(\frac{1}{a_{i-1}}\) 的概率选到正确答案,答案为 \(\frac{1}{a_i}\)
    • \(a[i] < a[i - 1]\) ,同理答案为 \(\frac{1}{a_{i-1}}\)

UVA11021 Tribles

提高+/省选-

评测记录

题意

一开始有 \(k\) 种生物,这种生物只能活1天,死的时候有 \(p_i\) 的概率产生 \(i\)只这种生物(也只能活一天),询问 \(m\) 天内所有生物都死的概率(包括 \(m\) 天前死亡的情况)。

思路

  • \(dp[i]\) 表示对于某一只生物第 i 天消亡的概率,最后的答案算下 k 次幂就可以了。
  • 考虑接下来生 j 只生物,其消亡概率为 \(dp[i] = \sum_{j<n} p[j]\times dp[j]^k\) ,复杂度 \(O(nm)\)

P2634 [国家集训队]聪聪可可

[提高+/省选-]、树形dp + 概率dp

评测记录 1A

题意

从树上随机选两点,路径和为 3 的倍数的概率?

思路

  • 可以对路径模 3 等价处理,设计状态 \(dp[u][0/1/2]\) 表示 u 子树中距离 u 点距离模 3 意义下为 0,1,2 的方案数。
  • 转移很简单,可以考虑换根dp来统计父亲的个数,也可以直接累加所有点的答案。

P1850 [NOIP2016 提高组] 换教室

[提高+/省选-]、floyd预处理、概率期望dp

评测记录

题意略

思路

  • 点数很少直接 floyd 找最短路径,然后直接线性dp。
  • \(f_{i,j,0/1}\) 表示在第 i 节课,申请换了 j 次,第 i 节课有没有申请换的最小期望。
  • 转移:
    • \(f_{i,j,0}=\min (f_{i-1,j,0} + g_{c_i,c_{i-1}}, f_{i-1,j,1} + (1-k_{i-1}) \times g_{c_i,c_{i-1}} + k_{i-1}\times g_{c_i,d_{i-1}})\)
    • 对于 \(f_{i,j,1}\) 的转移也很类似,就是多几种情况罢了。

P1365 WJMZBMR打osu! / Easy

提高+省选-辅助变量也要做期望

评测记录

题意略

思路

  • 容易设出状态 \(f_i\) 表示 i 结尾的期望分数,难点在转移。
  • 如果是 o 或者 x 很好转移,如果是 ? 的话,需要讨论,既然都是 1/2 的概率,那就直接把转移代价各乘 1 / 2,注意维护的连续长度 len 也要 /= 2;

Codeforces

CF768D. Jon and Orbs

CF768D 、概率DP、

\(k\) 种龙晶,\(q\) 个询问,每天产生一种龙晶,且概率相等,每次询问一个 \(p\),求产生 \(k\) 种龙晶的概率 \(\geq \frac{p-ε}{2000}\) 的最小天数。

  • 简单概率DP,设状态为 \(dp[i][j]\) 第 i 天产生 j 种龙晶
  • 很容易转移。其中边界是 dp[i][0] = (i == 0) ? 1 : 0;
  • 由于不知道最小天数,并且 p 和最小天数有单调性,所以直接滚动数组,预处理询问答案。
const int N = 1010;
int ans[N];
double dp[N];
int main() {
    int k, q;
    re(k), re(q);
    dp[0] = 1;
    for (int i = 1, p = 1; p <= 1000; i++) {
        for (int j = k; j; j--)
            dp[j] = dp[j] * j / k + dp[j - 1] * (k - (j - 1)) / k;
        while (p <= 1000 && dp[k] * 2000 >= p - 1e-7) ans[p++] = i;
        dp[0] = 0;
    }
    while (q--) {
        int x;
        re(x);
        printf("%d\n", ans[x]);
    }
    return 0;
}

CF1754E. Wish I Knew How to Sort

*2000期望倒推

评测记录

题意

长为 \(n\) 的 01 数组,每次随机选取一对位置交换,如果 1 在前就交换两个元素,询问选取次数的期望使数组排好序?

思路

  • 一个观察,0 和 1 的位置在排好序以后是固定的,只需要有多少个位置应该是 1 但现在是 0。
  • 统计之后,以 \(f_i\) 表示有 i 对位置还需要交换。
  • 期望倒推转移: \(f_i = \frac{i\times i}{n\times (n-1)} \times f_{i-1} + (1 - \frac{i\times i}{n\times (n-1)}) * f_i + 1\)
  • \(f_i = f_{i-1} + \frac{n\times (n-1)}{i*i}\)

CF1042E. Vasya and Magic Matrix

*2300前缀和优化、推式子

评测记录

题意

一个\(n\)\(m\)列的矩阵,每个位置有权值\(a_{i,j}\)

给定一个出发点,每次可以等概率的移动到一个权值小于当前点权值的点,同时得分加上两个点之间欧几里得距离的平方(欧几里得距离:\(\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\))),问得分的期望。

思路

  • \(f_{i,j}\) 表示坐标 i,j 的到终点的期望得分。
  • 将格子按权值排序后变成了一维的问题,写一下转移式子。
    • \[f_{i,j}= \sum_{x,y|a_{x,y}<a_{i,j}} \frac{(x-i)^2 + (y-i)^2 + f_{x,y}}{sum} \]

  • 展开。\(f_{i,j} = \sum_{x,y}\frac{x^2 + y^2 + i^2 + j^2 - 2*i*x - 2*i*y + f_{x,y}}{sum}\)
  • 这个式子是可以用前缀和优化转移的。同时维护几个前缀和就好了。
posted @ 2022-10-28 13:15  Roshin  阅读(52)  评论(0编辑  收藏  举报
-->