AGC033D
文章目录
注意到一个$1\times 1$的格子的凌乱度为$0$
而每次将整个矩阵每次从中间劈开,最多只能劈$\log_2 H+\log_2 W$次,所以说整个矩阵的混乱度是$O(\log H+\log W)$级别的。
现在,考虑$dp$计算以下值:
-
混乱值为$i$的子矩阵的最大水平长度,其左上角和左下角的坐标分别为$(r,c)$和$(r',c)$
-
混乱值为$i$的子矩阵的最大垂直长度,其左上角和右上角的坐标分别为$(r,c)$和$(r,c')$
令$dp[v][i][l][r]$表示凌乱度为$v$,在$l$行到$r$行时之间第$i$列开始向右延伸最多能延伸到第几列。
转移讨论下一刀横着还是竖着。
如果是竖着:$dp[v][i][l][r]=dp[v-1][dp[v-1][l][r][i]+1][l][r]$
否则$dp[v][i][l][r]=\max(\min(dp[v][i][l][k],dp[v][i][k+1][r])),k\in [l,d-1]$
然后使用双指针把循环$k$给优化掉
时间复杂度$O(HW(H+W)\log HW)$。
|
|