QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: Anonymous

Posted at:

Last updated:

Back to Problem

$\widetilde O(n^{1+2\omega})$ by ChatGPT

官方题解只能做到 $O(n^6)$?玩的太差了。这题可以做到 $\widetilde O(n^{1+2\omega})$。

存在严格的 $o(n^6)$ 理论算法。可以用快速布尔矩阵乘法做到

$$ \widetilde O(n^{1+2\omega}), $$

其中 $\widetilde O$ 隐去对数因子。不过,这条路线的实现成本和常数很大。

下面是我推导的一种归约,包含两问。

  1. 把取球过程变成 DAG 上的路径。

    每个剩余区间 $[l,r]$ 是一个顶点,取左端、取右端分别对应一条边,边标号就是取出的颜色。所有空区间合并为终点。

    图有 $N=O(n^2)$ 个顶点、$O(n^2)$ 条边。起点到终点的路径与取球方案一一对应。

  2. 预处理有深度限制的完全消除。

    把消除的一对同色球视为一对同色括号。令 $D_h[u,v]$ 表示:存在从 $u$ 到 $v$ 的路径,其颜色序列能完全匹配,括号最大嵌套深度不超过 $h$。

    记颜色 $c$ 的边邻接矩阵为 $A_c$,则在布尔运算下:

    $$ D_0=I,\qquad B_h=\bigvee_c A_cD_{h-1}A_c,\qquad D_h=B_h^*. $$

    这里 $B_h$ 表示一个形如 $cSc$ 的匹配块,闭包 $B_h^*$ 表示若干匹配块连接。

    同色括号的抽象匹配可能与实际消除顺序不同,但实际栈高不会超过抽象栈高;反过来,实际消除本身就给出一种匹配。因此这种表示在求最优值时是精确的。

    计算 $B_h$ 时直接枚举两条同色边,查询中间的 $D_{h-1}$,耗时 $O(n^4)$,不用逐颜色做矩阵乘法。

    若布尔矩阵乘法耗时 $O(N^\alpha)$,DAG 的传递闭包也能通过分块递归在 $O(N^\alpha)$ 时间求出。只需计算 $h\le\lfloor n/2\rfloor$,总时间:

    $$ O(n^5+n^{1+2\alpha}). $$

  3. 求最少剩余球数 $r$。

    将不限制深度的 $D_{\lfloor n/2\rfloor}$ 中的可达关系作为费用 $0$ 的边,原图边作为费用 $1$ 的边,求最短路。

    这是因为任何最终剩下 $r$ 个球的操作序列都能分解为

    $$ S_0\,x_1\,S_1\,x_2\cdots x_r\,S_r, $$

    其中每个 $S_i$ 完全消除,$x_i$ 是最终留下的球。最短路耗时 $O(N^2)=O(n^4)$。

  4. 二分容量 $C$。

    枚举已经放入的最终保留球数 $t$,维护当前能到达哪些图顶点。

    此时杯底已有 $t$ 个球,下一段完全消除的序列只能使用

    $$ D_{C-t-1}. $$

    这里减 $1$ 正是为了计入消除前刚放入的那个球。非空完全消除序列若最大嵌套深度为 $h$,需要容量 $h+1$。

    完成这一段后,可以再取一个球,作为第 $t+1$ 个保留球。到 $t=r$ 时检查能否到达终点。约定 $D_{-1}=I$,即杯底已有 $C$ 个球时只能处理空段。

    每次判定耗时 $O(rN^2)=O(n^5)$,二分共 $O(n^5\log n)$。

所以总时间为

$$ \widetilde O(n^{1+2\alpha}+n^5). $$

采用经典快速矩阵乘法的 $\alpha=2.376$ 上界,就得到

$$ \boxed{\widetilde O(n^{5.752})=o(n^6)}. $$

该矩阵乘法指数已有原始论文支持。

我也用直接枚举左右端选择的程序,核对了 504 个小规模用例及题目样例,结果一致。这给出了理论上的严格改进,但尚不是普通区间 DP 的 $O(n^5)$ 优化。

以下代码使用 bitset 增量维护传递闭包,时间复杂度为

$$ O\!\left(\frac{n^6}{w}+\frac{n^5\log n}{w}+n^4\right). $$

https://qoj.ac/submission/3123320

Comments

No comments yet.