牛客普及組 合法括號序列

2022-07-24 01:06:33 字數 1048 閱讀 1663

鍵盤上有左括號(,右括號),和退格鍵-,共三個鍵。

牛牛希望按鍵n次,使得輸入的字串恰好乙個合法的括號序列。

每按一次左括號(,字串末尾追加乙個左括號(

每按一次右括號),字串末尾追加乙個右括號)

每按一次退格鍵-,會刪掉字串的最後乙個字元,

特別的,如果字串為空,牛牛也可以按退格,但是什麼都不會發生。

合法括號序列的定義和上一場比賽中的c題是一樣的

輸出方案數對p取模,注意p可能不是質數。

注:只要按鍵方法不同,就是不同的方案,即使得到的序列一樣。

此題有乙個比較麻煩的地方就是需要把刪除的貢獻也考慮在內

不妨將當前括號序列長度考慮在內

設 g[i][j] 表示進行了 i 次操作後序列長度為 j 的方案數

轉移也很好想 : g[i][j] = g[i -1][j - 1] + g[i - 1][j + 1] * 2

乘以 2 就是填入左 / 右括號,j = 0 時把 j - 1 改成 0

由於統計答案時統計的是合法括號序,就再 dp 出長度為 i 時的合法括號序即可

狀態設計為 f[i][j] 表示當前長度為 i ,還有 j 個左括號未匹配

**:

#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn = 1005;

int n;

ll f[maxn][maxn], g[maxn][maxn];

ll p, ans;

int main()

} g[0][0] = 1ll;

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

} ans = g[n][0];

for(int j = 2; j <= n; j += 2)

printf("%lld\n", ans);

return 0;

}

因為合法的括號序長度一定是偶數,所以列舉長度也列舉偶數

牛客 程式設計題 合法括號序列判斷 C

對於乙個字串,請設計乙個演算法,判斷其是否為乙個合法的括號串。給定乙個字串a和它的長度n,請返回乙個bool值代表它是否為乙個合法的括號串。測試樣例 6 返回 true 測試樣例 a 7 返回 false 測試樣例 7 返回 false 建棧,遍歷字串a,遇到左括號入棧,右括號分情況 如果棧空的話,...

合法括號序列(dp 組合數學)

鍵盤上有左括號 右括號 和退格鍵 共三個鍵。牛牛希望按鍵n次,使得輸入的字串恰好乙個合法的括號序列。每按一次左括號 字串末尾追加乙個左括號 每按一次右括號 字串末尾追加乙個右括號 每按一次退格鍵 會刪掉字串的最後乙個字元,特別的,如果字串為空,牛牛也可以按退格,但是什麼都不會發生。輸出方案數對p取模...

牛客網 檢查括號匹配是否合法 Python

演算法的基本思想 1.凡出現左括弧,則進棧 2.凡出現右括弧,首先檢查棧是否空 若棧空,則表明該 右括弧 多餘 否則和棧頂元素比較,若相匹配,則 左括弧出棧 否則表明不匹配。3.表示式檢驗結束時 若棧空,則表明表示式中匹配正確,否則表明 左括弧 有餘 string list input temp c...