loading...

[AGC035E] Develop

[AGC035E] Develop

集合 \(S\) 中有 \(-1 \sim 500\) 的数各一个,给定 \(n, k\),每次操作可以选择 \(1 \le i \le n \land i \in S\):

  • 若 \(i - 2 \notin S\),加入 \(i - 2\)。
  • 若 \(i + k \notin S\),加入 \(i + k\)。
  • 删除 \(i\)。

求出最后可能的集合总数。

\(1 \le k \le n \le 150\)。

其实是一道很无聊的题目。考察最终集合 \(S'\),我们只关心能否有方法将 \(S \setminus S'\) 的部分给删掉,所以实际上是统计可删集合 \(T\) 的树木。

考虑建模:如果删除 \(i\) 会加入 \(i - 2, i + k\),则连边 \(i \to i - 2\) 和 \(i \to i + k\)。容易证明,\(T\) 的导出子图无环是 \(T\) 合法的充要条件。

如果 \(k\) 为偶数,则偶数位置和奇数位置独立,两边分开做,当且仅当选出连续 \(\frac{k}{2} + 1\) 个位置不合法,用 DP 分别求解即可。

如果 \(k\) 为奇数,情况会复杂些。我们还是把奇偶位置分开,\(i \to i + k\) 的边就会在两边横跳。观察到环的一般形态是一个 \(\infty\)(先通过一条 \(i \to i + k\) 到右边,倒着走一段,走一个 \(j \to j + k\) 回到左边,倒着走回 \(i\)),或者退化成 \(\lhd\) 等。

按照自然数顺序 DP,\(i \to i + k\) 的边跨越太大,两边不好兼顾。所以考虑按层 DP,每层由奇数 \(i\) 和偶数 \(i+k\) 组成。

定义 \(f_{i, j, l}\) 表示考虑到第 \(i\) 层,偶数连续选择了 \(j\) 个,奇数还能再连续选 \(l\) 个(否则成环)的方案数。

转移是简单的。

posted @ 2026-10-22 11:20  goldspade  阅读(6)  评论(0)    收藏  举报