bzoj4350 括號序列再戰豬豬俠

2022-08-17 05:12:19 字數 2163 閱讀 3458

括號序列與豬豬俠又大戰了起來。

眾所周知,括號序列是乙個只有(和)組成的序列,我們稱乙個括號

序列s合法,當且僅當:

1.( )是乙個合法的括號序列。

2.若a是合法的括號序列,則(a)是合法的括號序列。

3.若a,b是合法的括號序列,則ab是合法的括號序列。

我們考慮match[i]表示從左往右數第i個左括號所對應的是第幾個右

括號,現在他得到了乙個長度為2n的括號序列,給了你m個資訊,第i

個資訊形如ai,bi,表示match[ai]但是你發現這個豬豬俠告訴你的資訊,可能有多個括號序列合法;甚

至有可能告訴你乙個不存在合法括號序列的資訊!

你最近學了取模運算,你想知道答案對998244353(7*17*2^23+1)取

模的結果,這個模數是乙個質數。

第一行乙個正整數t,t< = 5,表示資料組數。

對於每組資料,第一行乙個n,m,n表示有幾個左括號,m表示資訊數。

接下來m行,每行兩個數ai,bi,1< = ai,bi< = n。

對於每組資料,輸出乙個數表示答案。

51 0

5 03 2

1 22 3

3 22 1

2 33 3

1 22 3

3 11421

20對於前兩個點,是卡特蘭數的情況。

對於第三個點,合法的情況只可能是 ()()()。

對於第四個點,合法情況可能是 (()()) 或者 (())()

對於第五個點,由於拓撲關係形成了環,顯然無解。

對於 100% 的資料,保證 n < = 300

如果matcha[ai]bi,ai和它所對應的右括號,一定被bi所對應的的括號包在中間,我們來考慮一下括號有幾種可能吧,很顯然有(ab),()ab,,(a)b,這三種方案,我們列舉乙個區間的左括號,f[i][j]表示第i個左括號到第j個左括號能形成多少種方案。

1.如果要符合上面的第一種方案,那麼很明顯第i個左括號和它對應的右括號不能完全在ab的左邊,即第i個左括號對第i+1到j之間的左括號不能有任何乙個被提出過match[i]2.如果要符合第二種方案,那麼第i個左括號和它對應的右括號必須完全在ab的左邊,即第i個左括號對第i+1到j之間的左括號必須每個都被提出過match[i]3.如果要符合第三種我們就要進行列舉了,因為我們不知道b序列最右邊的左括號是總序列中的第幾個括號。列舉乙個k來表示a中的最後乙個左括號,則b中的開頭左括號為k+1,我們要如何滿足這種條件呢?有兩個注意點,(1).k+1到j的括號必須全部都在i~k括號的右邊。(2).i+1~k括號必須包含在第i個括號中,即第i個括號不能在他們的右邊。

只要滿足注意點,它的方案數就可加上兩邊的乘積。

最最重要的一點來了,我們如何去判斷括號在左邊右邊呢?不要說去乙個個列舉。。。我們用乙個s陣列來儲存關係,若match[ai]

1 #include2 #include3 #include4 #include5

using

namespace

std;

67 typedef long

long

ll;8

const

int sz = 500;9

const

int mod = 998244353;10

11int

dp[sz][sz];

12int

sum[sz][sz];

1314

int getsum(int a,int b,int c,int

d)15

1819

int ask(int

n)20

36}37return dp[1

][n];38}

3940

void

init()

4145

46int

main()

4761

for(int i = 1;i <= n;i ++)

62for(int j = 1;j <= n;j ++)

63 sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1

];64 printf("

%d\n

",ask(n)); 65}

66return0;

67 }

BZOJ4350 括號序列再戰豬豬俠

括號序列與豬豬俠又大戰了起來。眾所周知,括號序列是乙個只有 和 組成的序列,我們稱乙個括號 序列s合法,當且僅當 1.是乙個合法的括號序列。2.若a是合法的括號序列,則 a 是合法的括號序列。3.若a,b是合法的括號序列,則ab是合法的括號序列。我們考慮match i 表示從左往右數第i個左括號所對...

bzoj4350 括號序列再戰豬豬俠 區間DP

括號序列與豬豬俠又大戰了起來。眾所周知,括號序列是乙個只有 和 組成的序列,我們稱乙個括號 序列s合法,當且僅當 1.是乙個合法的括號序列。2.若a是合法的括號序列,則 a 是合法的括號序列。3.若a,b是合法的括號序列,則ab是合法的括號序列。我們考慮match i 表示從左往右數第i個左括號所對...

BZOJ4350 括號序列再戰豬豬俠 區間DP

括號序列與豬豬俠又大戰了起來。眾所周知,括號序列是乙個只有 和 組成的序列,我們稱乙個括號序列s合法,當且僅當 1.是乙個合法的括號序列。2.若a是合法的括號序列,則 a 是合法的括號序列。3.若a,b是合法的括號序列,則ab是合法的括號序列。我們考慮match i 表示從左往右數第i個左括號所對應...