关于一类最优解存在长度为 $k$ 的循环节的问题
问题形式:给定长度为 \(n\) 的序列,要求选出一些位置,使这些位置满足限制条件 \(T\),其中 \(T\) 满足性质:“若长为 \(k\) 的序列 \(A\) 满足条件,那么序列 \(AA\dots A\) 也满足条件”,选出第 \(i\) 个位置的收益是 \(f(i\bmod k)\),求最大收益。
关键在于证明一个引理:最优解一定存在长度为 \(k\) 的循环节。证明如下:
假设 \(n \bmod (x+y) \neq 0\), 等于 \(0\) 是 trivial 的。则把 \(1 \sim n\) 分为若干个段, 从左往右, 第奇数个段 (下标从 1 开始) 的长度是余数 \(r\), 偶数段的长度是 \(x+y-r\), 共有奇数个段。
设 \(d l t_i\) 表示把所有与第 \(i\) 个段的下标奇保性相同的段全部改为 \(i\), 序列总权值的变化量 (不考虑合不合法)。显然 \(\sum_k d l t_{2 k+1}=\) \(\sum_k d l t_{2 k}=\sum_k d l t_k=0\) 。我们想证明的, 其实是 \(\exists x, d l t_x+d l t_{x+1} \geq 0\) ,反证, 假设不存在, 即 \(\forall x, d l t_x+d l t_{x+1}<0\), 则
-
\(d l t_2+d l t_3<0, d l t_4+d l t_5<0, \ldots\), 可以得到 \(\sum_{i \neq 1} d l t_i<0\) 。但 \(\sum d l t_i=0\), 因此 \(d l t_1>0\) 。
-
\(d l t_1+d l t_2<0, d l t_4+d l t_5<0, \ldots\), 可以得到 \(\sum_{i \neq 3} d l t_i<0\) 。 但 \(\sum d l t_i=0\), 因此 \(d l t_3>0\) 。
-
以此类推得到 \(\forall k, d l t_{2 k+1}>0\) 。
与 \(\sum_k d l t_{2 k+1}=0\) 矛盾。证毕。
有长度为 \(k\) 的循环节,一切就都好做了。