NOIP2024集訓Day23 DP常見模型4 - 樹形
A. [CSP-S 2021] 括號序列
區間 dp,令 \(f_{l, r}\) 表示從位置 \(l\) 到位置 \(r\) 一共的合法序列總情況數量。
一共有六種不同的轉移情況,所以將 \(f_{l, r}\) 擴充到三維。
- 全是
*
(...)
(...)**(...)***
,左邊以括號序列開頭,右邊以*
結尾(...)**(...)**(...)
,均以括號序列開頭和結尾(包含形態二)***(...)***(...)
,左邊以*
開頭,右邊以括號序列結尾***(...)**(...)***
,左右均以*
結尾(包含形態一)
轉移(序號對應上邊的形態):
-
直接特判(暴力判斷兩端的距離是否 \(\le k\),是的再轉移)
-
\(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\) 是否能匹配括號
-
\(f_{l, r, 2} = \sum\limits_{i = l}^{r -1} f_{l, i, 3} \times f_{i + 1, r, 0}\)
均以括號序列開頭和結尾是 3,右邊接一串
*
,是 0。 -
\(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,還要加上直接一個括號序列的。
-
\(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。 -
\(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)\) 不到。