【题解】Solution Set - NOIP2024模拟赛2

【题解】Solution Set - NOIP2024模拟赛2

Contest

Official Solution


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 树上竞技

难点其实是:

  1. 想到计算每个点的贡献转化为每一条边的贡献。

  2. 组合意义得出递推式。

具体做法可以参见题解。



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))\)

posted @ 2024-08-18 15:38  CloudWings  阅读(17)  评论(0编辑  收藏  举报