省选联考 2020 A/B卷 信号传递

发布时间 2023-03-24 07:49:04作者: PYD1

我们看到要让我们确定一个顺序,并且 \(m\le23\),第一想法肯定是一个状压,精细实现应该可以做到 \(O(m2^m)\)

我们先观察一下题目当中给的贡献方式,肯定是要把它拆一拆,拆成每个信号站的贡献的形式。考虑两个信号站 \(i,j\),位置在 \(p_i,p_j\),倘若 \(p_i\le p_j\),我们有贡献 \(p_j-p_i\),否则我们有贡献 \(k(p_i+p_j)\)。这些贡献显然是可以分摊到每一个信号站的头上的。

考虑我们当前已经决定了 \(st\) 中的顺序,下一个被指定的是 \(p\),考虑计算一个贡献,发现不会算(我在这想了半天?)。因为 \(n\) 太大了,但是我们其实并不 care \(S\) 的具体排列,我们只关心在信号站 \(p\) 前面的/后面的 选过的/没被选的 有多少个,随便预处理一下就可以了。

总复杂度 \(O(m2^m)\)。但是我们预处理的数组要开 \(m2^m\) 个 int,显然是要爆炸的。我们可以按照 \(st\)\(1\) 的个数的顺序一层层地存即可,大概要开 \(m\binom{m}{\frac{m}{2}}\) 个 int,稳得一匹。