YCH的模擬賽 T1

2022-02-17 16:27:35 字數 912 閱讀 4822

括號序列問題,往往就是把左括號看成+1,右括號看成-1,我們只需要保證任意乙個字首大於等於0,且總和為0,就代表是個合法括號序列了。

令\(f[i][j]\)表示當前到第\(i\)個字元,現在的字首和\(j\)。那麼分三種情況考慮。

若第\(i+1\)個字元是左括號,則能轉移到\(f[i+1][j+1]\)。

若第\(i+1\)個字元是右括號,則能轉移到\(f[i+1][j-1]\)。

若第\(i+1\)個字元是問號,則能轉移到\(f[i+1][j-1]\)與\(f[i+1][j+1]\)。

最終\(f[n][0]\)就是方案總數啦。

時間複雜度為\(o(n^2)\)。

優化:二維陣列一定會炸。。。。

那就。。。迴圈佇列!

我們發現每次到新的乙個 $i $,它只和 \(i-1\) 有關,所以 \(i-1\) 用過一次就可以銷毀了,不然也是佔空間

可以像這樣&1​來實現迴圈利用

f[i & 1][0]=0
std

#includeusing namespace std;

typedef long long ll;

const ll mod=1e9+7;

int n;

int f[3005][3005];

char c[3005];

int main()

} if(c[i]=='h')

}if(c[i]=='h')

}if(c[i]=='c')

f[i&1][i]=f[(i-1)&1][i-1];

} }cout<

}

YCH的模擬賽 T3

暴搜或者字典樹,但是因為輸出所有的方案而不是方案數,不管什麼做法都逃不過輸出,所以都差不多 sol1 記憶化搜尋 當列舉方案時,f i 表示已經把字串的前i個字母都拼好的情況下有多少方案 考慮從第i 1個字元開始到j是乙個給定的單詞 如果有這樣的j的話就可以轉移 然後開乙個vector把每乙個狀態下...

4 21小A模擬賽 T1

description 乙個無限長的01 序列,初始全為0,每次選擇乙個區間 l,r 進行操作,有三種操作 1 l r 將 l,r 中所有元素變成1。2 l r 將 l,r 中所有元素變成0。3 l r 將 l,r 中所有元素異或上1。每次操作後詢問最左邊的0 在哪個位置。input format ...

11 12 模擬賽T1 加密

有一種不講道理的加密方法是 在字串的任意位置隨機插入字元。相應的,不講道理的解密方法就是從字串中恰好刪去隨機插入的那些字元。給定原文?和加密後的字串?求?有多少子串可以通過解密得到原文?輸入第一行包含乙個字串?第二行包含乙個字串?輸出一行,包含乙個整數,代表可以通過解密得到原文的?的子串的數量。ab...