【题解】Solution Set - NOIP2024模拟赛2
【题解】Solution Set - NOIP2024模拟赛2
T1 接力比赛
考场思路是直接暴力跑两个背包 dp,然后 \(1e9,1s\) 过了。
正解的话,还是比较有意思的。
首先她把第二个背包的容量取负,然后答案就是容量为 \(0\) 的 dp 值。
然后我们感性理解一下,如果当前的容量的绝对值很大了,那么她几乎是不可能回到 \(0\) 的,特别是整个序列的足够随机的时候。
数学证明了如下结论:
一个初值为 \(0\) 的变量 \(x\),每次有 \(50\%\) 的概率 \(+1\),\(50\%\) 的概率 \(-1\)。目标是在操作 \(n\) 次以后变为 \(0\)。
对于某一次操作结束后如果有 \(|x|\ge \sqrt n\),那么她一定是不能变回 \(0\) 的。(并且这个上界是比较松的(?
所以对于这道题而言,我们把两个班的人放在一个序列里面,然后 random_suffle()
一下舍弃掉那些容量大于 \(V\sqrt n\) 的 dp 值。
T2 树上竞技
难点其实是:
-
想到计算每个点的贡献转化为每一条边的贡献。
-
组合意义得出递推式。
具体做法可以参见题解。
T4 记忆碎片
考虑一个 dp。
设 \(f_{i,s}\) 表示联通了权值从 \(1\sim i\) 的边,联通状态为 \(s\) 的方案数。
\(s\) 储存的是整张图中每个联通块的大小(从小到大。
那么状态数即为 \(40\) 的正数划分 \(P(40)=37338\)。
考虑转移:
如果 \(i\) 是一条非树边,那么这条边对方案数的贡献就是所有联通块内部任意连边。
如果 \(i\) 是一条树边,那么在当前状态下一定会合并两个联通块,于是在所有大小不同的联通块中枚举两个然后将她们合并。显然大小不同的联通块一共有 \(O(\sqrt n)\) 个,所以每次枚举是 \(O(n)\) 的,一共要合并 \(n-1\) 次。所以总时间复杂度为 \(O(n^2P(n))\)。