NOIP2024集訓Day23 DP常見模型4 - 樹形

Leirt_Abu發表於2024-09-05

NOIP2024集訓Day23 DP常見模型4 - 樹形

A. [CSP-S 2021] 括號序列

區間 dp,令 \(f_{l, r}\) 表示從位置 \(l\) 到位置 \(r\) 一共的合法序列總情況數量。

一共有六種不同的轉移情況,所以將 \(f_{l, r}\) 擴充到三維。

  1. 全是 *
  2. (...)
  3. (...)**(...)***,左邊以括號序列開頭,右邊以 * 結尾
  4. (...)**(...)**(...),均以括號序列開頭和結尾(包含形態二)
  5. ***(...)***(...),左邊以 * 開頭,右邊以括號序列結尾
  6. ***(...)**(...)***,左右均以 * 結尾(包含形態一)

轉移(序號對應上邊的形態):

  1. 直接特判(暴力判斷兩端的距離是否 \(\le k\),是的再轉移)

  2. \(f_{l, r, 1} = (f_{l +1, r - 1, 0} + f_{l + 1, r - 1, 2} + f_{l + 1, r - 1, 3} + f_{l + 1, r - 1, 4}) \times \operatorname{check}(l, r)\),其中 \(\operatorname{check}(l, r)\) 表示判斷 \(l\)\(r\) 是否能匹配括號

  3. \(f_{l, r, 2} = \sum\limits_{i = l}^{r -1} f_{l, i, 3} \times f_{i + 1, r, 0}\)

    均以括號序列開頭和結尾是 3,右邊接一串 *,是 0。

  4. \(f_{l, r, 3} = \sum\limits_{i = l}^{r - 1}(f_{l, i, 2} + f_{l, i, 3}) \times f_{i + 1, r, 1} + f_{l, r, 1}\)

    左邊以括號序列開頭,結尾隨便,符合的有 2 和 3,右邊界一個括號序列,是 1,還要加上直接一個括號序列的。

  5. \(f_{l, r, 4} = \sum\limits_{i = l}^{r - 1}(f_{l, i, 4} + f_{l, i, 5})\times f_{i + 1, r, 1}\)

    左邊以 * 開頭,結尾隨便,符合的有 4 和 5,右邊借一個括號序列,是 1。

  6. \(f_{l, r, 5} = \sum\limits_{i = l}^{r - 1} f_{l, i, 4} \times f_{i + 1, r, 0} + f_{l, r, 0}\)

    左邊以 * 開頭,以括號序列結尾,符合的是 4,右邊接一串 *,是 0,還要加上全是 * 的。

答案必須是以括號序列開頭,括號序列結尾,於是為 \(f_{1, n, 3}\)

初始化:對於所有的 \(1\le i\le n\),有 \(f_{i, i - 1, 0} = 1\)

時間複雜度 \(\Theta(6\times n^3)\) 不到。

相關文章