集训Day2-DP

DP

CF1097D

简要题意: 给出 \(n,k\),每次操作会等概率将 \(n\) 变为 \(n\) 的一个约数。求 \(k\) 次操作后 \(n\) 的期望(模意义)。

先从特殊情况考虑:\(n=p^e\)

我们可以用DP。令 \(f_{i,j}\)\(i\) 次操作后,\(n=p^j\) 的概率。初始化和转移很简单:\(f_{i,j}=\sum_{w=j}^e\frac{f_{i-1,w}}{w+1}\)。期望用概率求出。

考虑一般情况 \(n=\prod_{i=1}p_i^{e_i}\)

然后注意到,对于 \(p_1,p_2\),它们的贡献独立。独立就满足期望 \(E(p_1p_2)=E(p_1)E(p_2)\)

所以质因数拆分即可。预处理逆元,前缀和优化DP,总时间复杂度是 \(\Theta(\sqrt n+\omega(n)k\log n)\)

ABC292G

简要题意: 给定 \(n\) 个长度为 \(m\) 字符串 \(S_1,S_2,...,S_n\),字符串由数字和?组成。找出多少种向问号填数的方式,使得字典序上,\(S_1<S_2<...<S_n\)

可以区间DP。

\(f_{i,l,r,k}\) 表示在字符串 \(S_l\sim S_r\) 上,已经确定前 \(i-1\) 个字符,这一位需要填 \(\ge k\) 的数。转移:

\[f_{i,l,r,k}=\sum_{p=l-1}^{r}\left(f_{i+1,l,p,0}\cdot f_{i,p+1,r,k+1}\right) \]

这个DP用记忆化更容易

CF1542D

简要题意:

考虑每个+x在多少个 \(f(S)\) 中出现。

先考虑 \(x\) 互不相同。此时堆 \(T\) 里比 \(x\) 小的个数很重要,决定 \(x\) 是否能留下。

\(f_{i,j}\) 为前 \(i\) 个操作,且 \(\le x\) 的元素有 \(j\) 个。

对于当前位置 \(p\)\(i<p\) 时,

  • -\(f_{i,j}\to f_{i+1,\max(j-1,0)}\)
  • +
    • \(a_i<a_p\)\(f_{i,j}\to f_{i+1,j+1}\)
    • \(a_i>a_p\)\(f_{i,j}\to f_{i+1,j}\)
  • 不选:\(f_{i,j}\to f_{i+1,j}\)

\(i=p\) 时,\(f_{i,j}\to f_{i+1, j+1}\)

\(i>p\) 时,

  • -\(f_{i,j}\to f_{i+1,j-1}(j>1)\)
  • +
    • \(a_i<a_p\)\(f_{i,j}\to f_{i+1,j+1}\)
    • \(a_i>a_p\)\(f_{i,j}\to f_{i+1,j}\)
  • 不选:\(f_{i,j}\to f_{i+1,j}\)

\(x\) 有相同时,我们钦定前面的小,这样就可以用下标作为第二权值比较,保证不同。

CF1842G

简要题意: 给定一个序列 \(a\)\(m,v\)。进行 \(m\) 次操作,每次等概率选一个位置后缀加上 \(v\)。求 \(\prod_{1\le i\le n} a_i\) 的期望。\(m\le 10^9,n\le 5000\)

首先,因为操作的不独立,我们无法把累乘从期望拆出来。

我们知道答案一定形如 \((a_1+v+v+\dots+v)(a_2+v+v+\dots+v)\dots(a_n+v+v+\dots+v)\),如果考虑所有组合,那么这些组合的和就是 \(\prod a_i\)

令每次操作为一行,第 \(1\) 行是原序列。

所以我们令 \(f_{i,j}\) 表示前 \(i\) 列有 \(j\) 行选出了 \(v\)

  • \(a_i\)\(f_{i,j}\gets f_{i-1,j}\cdot a_i\)
  • 选已经选过的 \(v\)\(f_{i,j}\gets f_{i-1,j}\cdot j\cdot v\)
  • 新开一行:\(f_{i,j}\gets f_{i-1,j-1}\cdot (m-j)\cdot i\cdot v\)
posted @ 2026-08-09 21:46  c_haoc  阅读(3)  评论(0)    收藏  举报