Atcoder Educational DP Contest 选做
作者:互联网
颓疯了,来做点题恢复一下状态。
刷水题了!!!
J Sushi
令 \(f_{a,b,c}\) 为 \(1\) 个寿司的盘子有 \(a\) 个,\(2\) 个寿司的盘子有 \(b\) 个,\(3\) 个寿司的盘子有 \(c\) 个的期望步数。
转移就枚举第一次选中了哪一种寿司,乘个选择的概率,加上个 \(\frac{n}{a+b+c}\) 即可。
有一说一我差点没写出来。
O Matching
令 \(f_S\) 为考虑了 \(1,2,\cdots,\text{popcount}(S)\) 内所有左部点,他们匹配的右部点集合为 \(S\) 的方案数,直接枚举 \(S\) 最低位匹配的位置转移就好了。
还算得上有一点技巧性?
Q Flowers
令 \(f_i\) 为最后一个保留的位置是 \(i\) 的最大价值和,然后直接用树状数组优化一下 dp。
W Walk
矩阵快速幂板子,直接把矩阵 \(k\) 次方然后每一个位置加起来即可。
T Permutation
以前学长讲过,现在差点又不会了。
Bonus1:P4099 [HEOI2013]SAO
Bonus2:loj#575. 「LibreOJ NOI Round #2」不等关系
可以发现树形图拓扑序计数问题严格强于其,于是把 Bonus1 代码蒯过来就好了。(雾)
还是讲一下做法:
令 \(f_{i,j}\) 为 dp 完前缀 \(i\),其中第 \(i\) 个位置在拓扑序位于 \(j\) 的方案数,那么可以得到转移方程:
\[f_{i,j}=\begin{cases}\sum_{k=1}^{j-1} f_{i-1,k} &<\\\sum_{k=j}^{i-1} f_{i-1,k}&>\end{cases} \]前缀和优化即可做到 \(O(n^2)\),AC。
不太会 Bonus2,看了下 loj 题解。
上面的 dp 状态都是两维的,不优秀。我们考虑忽略大于号,那么相当于填入若干递增序列,答案明显是一个多重组合数:
\[\frac{n!}{\prod x_i!} \]然后考虑用容斥来将大于号纳入考虑,有一个大于号没有满足则乘 \(-1\) 的容斥系数:
枚举最后一段递增序列,那么有:(令 \(cnt_i\) 为 \(i\) 这个前缀的大于号数量)
\[f_i=\sum_{j=0}^{i-1}f_j\times(-1)^{cnt_i-cnt_j}\times\frac{1}{(i-j)!} \]这个东西是分治 FFT 的形式,令 \(F(x)=f_x\times(-1)^{cnt_x},G(x)=\frac{1}{x!}\):
\[F(x)=(-1)^{cnt_i+cnt_{i-1}}\sum_{j=0}^{i-1}F(j)G(i-j) \]时间复杂度 \(O(n\log^2n)\)。
代码鸽了。
U Grouping
简单状压 dp,复杂度 \(O(2^nn^2+3^n)\)。
V Subtree
首先有一个 \(O(n^2)\) 的 dp,直接把每个点作为根节点,然后设 \(f_{i}\) 表示 dp 完 \(i\) 的子树,且 \(i\) 为黑色的方案数。
优化到 \(O(n)\) 直接换根 dp 即可。
由于模数不是质数,需要维护一个点所有儿子的前缀积和后缀积,典中典了这属于是。
W Intervals
首先将区间按照右端点排序,那么可以设计一个 \(O(n^2)\) 的 dp:
令 \(f_{i,j}\) 为考虑了前 \(i\) 个位置,最近一个 \(0\) 在位置 \(j\) 的最大答案,有:
\[f_{i,j}=\begin{cases}f_{i-1,j}+\sum_{l_k\leqslant j\leqslant r_k=i}&j<i\\\max_{k<i} f_{i-1,k}&j=i\end{cases} \]第一维滚一下,第二维放在线段树上即可做到 \(O(n\log n)\)。
X Tower
不会啊,自闭了。
首先总重量一定要小于等于承重能力的最大值,也就是总重量是 \(10^4\) 范围,提示我们考虑 \(O(ns)\) 做法。
有一个简单的 \(O(n^2s)\) 就是跑 \(n\) 遍从前往后的背包,但是显然过不了。
考虑安排一个合适的顺序,然后跑一遍背包。
我们考虑若 \(s_a-w_b>s_b-w_a\),那么 \(a\) 放在下面一定优于 \(b\),于是我们按照 \(s+w\) 排序即可。
Y Grid 2
典中典,感觉在 CF 也见过。
容斥,我们令 \(f_i\) 为最后停留在第 \(i\) 个点的所有路径容斥系数之和。
然后直接枚举上一个位置,中间的路径组合数爆算即可。
Z Frog 3
斜率优化板子,在考场上我肯定会选择用李超树碾过去,不过鉴于是练习。就推一推斜率优化吧。
设跳到的最后一个位置为 \(i\),有两个位置 \(j,k\) 可以转移s过来,且 \(j\) 比 \(k\) 优,那么有:
\[f_j+(h_i-h_j)^2+C\leqslant f_k+(h_i-h_k)^2+C \]化一化式子有:
\[\frac{f_j+h_j^2-f_k-h_k^2}{h_j-h_k}\geqslant 2h_i \]直接单调队列维护一下凸壳即可。
标签:Atcoder,Educational,选做,frac,大于号,AC,即可,cnt,dp 来源: https://www.cnblogs.com/xiaoziyao/p/15862800.html