NOI2025模拟赛23

100 + 100 + 0 = 200, 27/53.

T1.让别人修

答案非常小,考虑枚举答案所处的格子。需要做的就是,给你两个集合,判断能否分别抽出一个数使得或起来为给定的数。可以判定转计数,计数就是容斥,实现可以 FMT。时间复杂度 $O(m^2n2^n)$。

发现值相同的格子的计数可以同时进行,于是时间复杂度变为 $O(mn2^n)$。

T2.飞机趁机

可以对每个格子预处理选择哪些格子可以使该格子计入答案,之后相当于每个点选或不选,若选择就需要让其指向一个点,被指向的点需要开商店。

树形 DP,考虑将 $k$ 是否开商店挂在最浅的指向它的点上,$f_{i,j,k}$ 表示考 $i$ 子树的点选或不选,开了 $j$ 个商店,$i$ 指向 $k$,$k$ 未选择。$g_{i,j,k}$ 表示 $k$ 已选择,发现 $g$ 的第三维不重要,然后转移就是树上背包,时间复杂度 $O(n^3)$。

$m=1$ 怎么做?

点分治求出在每个点开商店的价值,时间复杂度 $O(n\log n)$。

T3.偷走零件

总结

  • 不会字符串
  • 做点树形 DP?