一段括號序列被稱為平衡的,如果對於任意字首,左括號的數目都不小於右括號。
給定一段括號序列,問有多少括號子串行是平衡的。(內容相同但位置不同的算兩種。)
input
輸入一行括號序列,括號序列的長度 <= 100。
output
輸出一行表示答案模 10^9 + 7 後的結果。
sample input
(()())
sample output
18hint
樣例一:
()__
(__)
()__
(__)
(__)
__()
__()
()()
()()
()()
()()
(())
(())
解析:dp[i]表示左括號比右括號多i的方案數,當前值為左括號時 可以代替之前出現過的任意乙個左括號或者作為新的括號出現,所以dp[i]+=dp[i-1],右括號同理
#includeusing namespace std;
const int n = 1e2+10;
const int m = 1e3;
typedef long long ll;
const ll mod = 1e9+7;
char str[200];
ll dp[n];
int main()
}else}}
cout<}
return 0;
}
合法括號子段
有乙個括號序列,現在要計算一下它有多少非空子段是合法括號序列。合法括號序列的定義是 1.空序列是合法括號序列。2.如果s是合法括號序列,那麼 s 是合法括號序列。3.如果a和b都是合法括號序列,那麼ab是合法括號序列。input 多組測試資料。第一行有乙個整數t 1 t 1100000 表示測試資料...
最長匹配括號子串行問題
給定乙個字串只包含 和 輸出其中最長的括號正確匹配的子串行的長度。輸入輸出 2 4 2 8以下將介紹三種複雜度為o n 的演算法 該演算法利用了棧來遍歷可能的匹配的括號子串行,遍歷的同時找出最長的子串行。遍歷不會遍歷所有的匹配括號子串行,併排的一些括號只有包含最左邊括號的子串行被遍歷,最長的括號子串...
HRBUST 語法檢查 括號匹配 棧
time limit 1000 ms memory limit 65536 k 有多組測試資料,每組測試資料有一段 該段 可能在有多行。每段 以ctrl z結束。處理到檔案結束。每組測試資料輸出一行。如果這段 括號匹配了,輸出 right 否則輸出 wrong。include right wrong...