#14142: 作者提供的解法


xavier13540 (柊 四千)

學校 : 國立臺灣大學
編號 : 21783
來源 : [36.230.28.22]
最後登入時間 :
2024-04-19 10:23:30
c620. 我收到CE,怎麼想都是測資的錯! -- NTUJ0507Codeforces407D | From: [140.112.229.87] | 發表日期 : 2018-06-16 06:34

不失一般性,設 $\color{black}{n \geq m}$ 以及 $\color{black}{1 \leq a_{ij} \leq nm}$。這題能用DP做到 $\color{black}{O(nm^2)}$ 的時間複雜度。

為了方便討論,我們定義以下的 notation 們:

  1. 對於每個 $\color{black}{1 \leq i \leq n, 1 \leq j \leq m, 1 \leq x \leq nm}$,定義 $\color{black}{A(j, x; i)}$ 為最大的 $\color{black}{l \leq i}$ 使得 $\color{black}{a_{lj} = x}$。
  2. 對於每個 $\color{black}{1 \leq i \leq n, 1 \leq j \leq m, 1 \leq k \leq m}$,
    1. 若 $\color{black}{j = k}$,定義 $\color{black}{B(i, j, k)}$ 為最大的 $\color{black}{l < i}$ 使得 $\color{black}{a_{lj} = a_{ij}}$;
    2. 若 $\color{black}{j \neq k}$,定義 $\color{black}{B(i, j, k)}$ 為最大的 $\color{black}{l \leq i}$ 使得 $\color{black}{a_{lk} = a_{ij}}$。
  3. 對於每個 $\color{black}{1 \leq i \leq n, 1 \leq j \leq k \leq m}$,
    1. 若 $\color{black}{a_{i, j}, a_{i, j+1}, \ldots, a_{i, k}}$ 有重複的元素,定義 $\color{black}{C(i, j, k) = i}$;
    2. 若 $\color{black}{a_{i, j}, a_{i, j+1}, \ldots, a_{i, k}}$ 兩兩相異,定義 $\color{black}{C(i, j, k)}$ 為最大的 $\color{black}{l < i}$ 使得「存在 $\color{black}{j \leq p, q \leq k}$ 使得 $\color{black}{a_{ip} = a_{lq}}$」。
  4. 對於每個 $\color{black}{1 \leq i \leq n, 1 \leq j \leq k \leq m}$,
    1. 若 $\color{black}{a_{i, j}, a_{i, j+1}, \ldots, a_{i, k}}$ 有重複的元素,定義 $\color{black}{D(i, j, k) = i}$;
    2. 若 $\color{black}{a_{i, j}, a_{i, j+1}, \ldots, a_{i, k}}$ 兩兩相異,定義 $\color{black}{D(i, j, k)}$ 為最大的 $\color{black}{l < i}$ 使得 $\color{black}{\{a_{pq}\}_{l+1 \leq p \leq i, j \leq q \leq k}}$ 這個長方形兩兩相異。

如果上述的「最大的 $\color{black}{l}$」不存在,則定義為 $\color{black}{0}$。

注意我們的答案就是 $\color{black}{\max\{(i-D(i, j, k))(k-j+1): 1 \leq i \leq n, 1 \leq j \leq k \leq m\}}$。以下考慮轉移方程式:

  1. 從 $\color{black}{A(\cdot, \cdot; i-1)}$ 轉移到 $\color{black}{A(\cdot, \cdot; i)}$ 非常簡單。
  2. 對於 $\color{black}{B}$,我們有\[\color{black}{B(i, j, k) = \begin{cases}A(j, a_{ij}; i-1),&\text{if }j = k\\A(k, a_{ij}; i-1), &\text{if }j \neq k\text{ and }a_{ij} \neq a_{ik},\\i, &\text{if }j \neq k\text{ and }a_{ij} = a_{ik}.\end{cases}}\]
  3. 對於 $\color{black}{C}$,我們有\[\color{black}{C(i, j, k) = \begin{cases}B(i, j, j),&\text{if }j = k,\\\max\{C(i, j, k-1), C(i, j+1, k), B(i, j, k), B(i, k, j)\},&\text{if }j < k.\end{cases}}\]
  4. 對於 $\color{black}{D}$,我們有\[\color{black}{D(i, j, k) = \begin{cases}C(1, j, k),&\text{if }i = 1,\\\max\{C(i, j, k), D(i-1, j, k)\},&\text{if }i > 1.\end{cases}}\]

因為狀態數是 $\color{black}{O(nm^2)}$,轉移時間 $\color{black}{O(1)}$,整體的時間複雜度就是 $\color{black}{O(nm^2)}$。

 
ZeroJudge Forum