[CF1265E] Beautiful Mirrors - 概率dp

Description

\(n\) 个镜子,编号从 \(1\)\(n\)。每天都会询问一面镜子,第 \(i\) 个镜子有 \(p_i\) 的概率回答漂亮。

如果第 \(i\) 面镜子回答漂亮,如果 \(i=n\) 则游戏结束,否则明天询问 \(i+1\)

如果第 \(i\) 面镜子回答不漂亮,明天从 \(i=1\) 开始。

求游戏结束的期望天数。

Solution

\(f_i\) 表示从 1 升级升到 i 的天数期望

转移时考虑从 i-1 升到 i 的过程

有 p 的概率成功升级,此时的升级代价是 1

有 (1-p) 的概率升级失败,此时的升级代价则是 \(1+f_i\)

化简后顺序递推即可

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 1000005;
const int mod = 998244353;

int p[N], n, f[N];

int qpow(int p, int q)
{
    return (q & 1 ? p : 1) * (q ? qpow(p * p % mod, q / 2) : 1) % mod;
}

int inv(int p)
{
    return qpow(p, mod - 2);
}

signed main()
{
    ios::sync_with_stdio(false);

    cin >> n;

    for (int i = 1; i <= n; i++)
        cin >> p[i];

    for (int i = 2; i <= n + 1; i++)
        f[i] = 100 * inv(p[i - 1]) % mod * (1 + f[i - 1]) % mod;

    cout << f[n + 1] << endl;
}

相关文章:

  • 2021-11-11
  • 2021-11-15
  • 2021-09-26
猜你喜欢
  • 2021-09-15
  • 2022-02-19
  • 2022-12-23
  • 2022-12-23
  • 2021-08-07
  • 2021-05-29
相关资源
相似解决方案