集训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\) 的数。转移:
这个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\)

浙公网安备 33010602011771号