组合,最优化问题分析
主要研究组合问题,譬如对合法方案的统计,最优化等。
处理研究对象。考虑有没有直观的表示方法,描述结构等。刻画解的性质。
“枚举”
一个典题
考虑一个序列所有子序列的权值和,权值定义为每相邻三个数 \(\max\) 之积。\(n\le 5000\)。
研究对象是所有子序列。“枚举法”,挨个加入每个元素。这是 dp 状态设计中基本的一种。
简单的状态为 \(dp_{i,j,k}\) 考虑 \(i\) 之前元素,倒数第一,二个为 \(j,k\) 的权值积的和。
但是不一定转移只能从 \(i-1\) 转移,考虑分讨 \(j,k\) 的关系然后发现 \(j<k\) 可以从 \(i-2\) 转移。
调整
主要是通过对研究对象方案进行“调整”,使得每步调整都更优。
或者通过“调整”来研究解的性质。
例如:区间相交->不交且包含;一维路径的折返->去除折返;二维问题中的逆序对;
ARC165F Make Adjacent
考虑只有 1122,分讨 1-1,2-2 形成的区间的关系,发现若存在 \(l_i<l_j,r_i<r_j\) 那么 \(i\) 肯定在 \(j\) 前。
否则都可以通过调整使得 \(i,j\) 位置互换,且调换次数最少。
然后考虑上述 \(i\) 向 \(j\) 连边,然后优化建图,跑一个拓扑序字典序最小的拓扑排序即可。
AGC036D Negative Cycle
考虑 -1 边的性质,若保留一个 -1 边那么包含这条边的 -1 边一定会被保留,因为无论是否保留都一样。
即如果放到二维平面上,保留的 -1 边一定形成一个阶梯型。
进一步观察,这个阶梯的角一定会碰到 \(l+1=r\) 处,因为这样也是肯定不劣的。(通过调整)。
于是发现整个序列可以被划分为若干个区间。后面做个 dp 即可。
AGC054D (ox)
考虑没有 ox 的情况,那么现在我们只需要让其满足是一个合法括号序列即可。
那么考虑用折线描述。考虑从前往后扫,对于每一个小于 \(0\) 的位置都从后找一个左括号挪过来即可。
考虑插入 ox,发现 o 可以插入到任意一个位置,x 需要被任一对括号包住。
。。
CF1637H Minimize Inversions Number
网格。
Qoj # 2599. Anti-stress
考虑对于任意一个合法解一定会存在一个“十字架”,第一象限和第三象限,第二象限和第四象限匹配。
如果已知角度,那么为了让 x 轴上下,y 轴左右的点的个数相同,这个十字架的位置是已知的。
那么我们可以 check 一个角度是否合法。合法条件是颜色能匹配。
设 \(d\) 表示意一象限蓝色-三象限黄色,不难发现转一圈后 \(d\) 变成 \(-d\),我们要求 \(d=0\)。
因为 \(d\) 是连续变化的函数只有 \(+1\) 和 \(-1\),根据介值定理(零点定理)必存在 \(d=0\) 的点,可以二分。
具体地,我们只需要保证区间两端点异号即可,二分往异号那边走。
对解集的研究
有时我们需要考虑整个问题的解集是什么样,而解集会有一些性质,比如 a in S,b in S 推出 a xor b in S
对于一个解,调整出另一个解。
解集的差分,组合。
打表分析解集的结构。
AGC051C Flipper
。。
CF698F Coprime Permutation
。。。
qoj # 7177. Many Many Cycles
考虑两个简单环有交,设他们为 C1,C2,那么 C1 xor C2 也是一个简单环。设其为 C3。
考虑 C3 的大小,即为 C1 + C2 - 2 * 环交。因为我们求 gcd,所以 2 * 环交已经可以表示 C3。
所以考虑取一个 dfs 树出来,考虑所有一条返祖边构成的环,通过组合可以生成所有环,相当于 C1,C2.
考虑如何求环交。这是一个经典问题考虑 xor-hash。给每个环(返祖边)随机一个权值。
然后一个树边的权值为覆盖其的环的异或和。相同权值的加到一类里。注意返祖边也要加入。
最后,在一类的且异或和不为 \(0\) 的和即为环交。记得 2 * 环交。
*观察最短解到一个特别的做法,随机一个 dfs 树只考虑返祖边构成的环算 gcd 即可。
uoj #792. 【UR #24】比特跳舞
考虑设 \(f_{i,j}\) 表示前 \(i\) 个元素最后一位是 \(j\) 的本质不同子序列数。考虑将相同的子序列放到最后去算。
那么 \(f_{i,a_i}=1+\sum_{k}f_{i-1,k},f_{i,j}=f_{i-1,j}\)。其中 \(j\neq a_i\)。
考虑常见的优化设 \(f_{i,0}=1+\sum_{k}f_{i,k}\),那么 \(f_{i,a_i}=f_{i-1,0},f_{i,j}=f_{i-1,j},f_{i,0}=2f_{i-1,0}-f_{i-1,a_i}\)。
因为我们求的是奇偶性,那么相当于交换 \(f_{i,0}=f_{i-1,a_i}\),所以相当于交换 \(f_{a_i},f_{0}\)。
初始 \(f_{0,0}=1\),那么序列合法当前仅当可以划分为若干个首尾相同的区间。可以点分治做。
考虑优化。这时候可以对合法解的性质进行研究了。 设 \((x,y)\) 表示 \(x\to y\) 合法。
那么 \((x,y)\to (y,x)\),\((x,y),(y,z)\to (y,z)\)。也就是说若 \((x,y)\) 相当于一条边,形成若干个独立的团。
所以我们需要合并等价类。考虑将一个等价类在树上表示出来,只考虑树上相邻的边。
如果存在一个点是其他所有点的祖先,那么我们每个点直接往其祖先最近的一个连边即可。
考虑不存在上述情况,取出所有祖先,然后若这些祖先满足条件就合并起来。
qoj # 8546. Min or Max 2
。。。

浙公网安备 33010602011771号