1.13模拟赛题解

T1

容易发现每个点的状态只与它被经过的次数有关。设 \(dp_{i,j}\) 表示经过点 \((i,j)\) 的次数,容易得到转移方程:

\[dp_{i,j}=\lfloor\dfrac{dp_{i-1,j}}{2}\rfloor+\lceil\dfrac{dp_{i,j-1}}{2}\rceil \]

初始状态 \(f_{0,0}=k-1\)

然后再模拟一遍第 \(k\) 个球的运动轨迹即可。

时间复杂度 \(O(n^2)\)

T2

先考虑问题在树上怎么做。

\(dp_{i,1/0}\) 表示以 \(i\) 为根的子树中,第 \(i\) 个点选或不选的最小选点数。容易得到转移方程:

\[dp_{x,0}=\sum\limits_{y\in son(x)}dp_{y,1} \]

\[dp_{x,1}=\sum\limits_{y\in son(x)} \min\{dp_{y,0},dp_{y,1}\} \]

现在的问题是一个基环树,考虑断掉一条环上的边 \((x,y)\),强制选点 \(x\)\(y\) 分别用上面的方法做一遍 DP,两者取最小值即为答案。

时间复杂度 \(O(n)\)

T3

先用 Kruskal 跑一遍最大生成树,保证瓶颈最大,再跑一遍最小生成树,保证 \(\sum b'\) 最大,再从大到小枚举生成树的边,计算 \(\sum b'\) 的值。时间复杂度 \(O(m\log m)\)

T4

数位 DP。设 \(dp_{x, s, base, 0/1, 0/1}\) 表示考虑到了第 \(x\) 位,当前用过的数字集合为 \(s\),进制为 \(base\),是否全是前导 \(0\),是否卡满上界的方案数。枚举当前位选什么数,然后无脑转移即可。

T5

\(dp_{l,r,c}\) 表示区间 \([l,r]\) 经过删除后最多能留下纯色的 \(c\) 的个数。易得转移方程:

\[dp_{l,r,c}=\max dp_{l,k,c}+dp_{k+1,r,c} \]

\(dp_{l,r,c} \ge m\),则需要把所有的\(dp_{l,r}\) 都和 \(0\)\(\max\)

时间复杂度 \(O(n^3c)\)

posted @ 2023-01-13 16:21  Egg_eating_master  阅读(40)  评论(0)    收藏  举报