小a有乙個只包含左右括號的字串s。但他覺得這個字串不夠美觀,因為它不是乙個合法的括號串。乙個合法的括號串是這樣定義的:
1. ()是合法的括號串
2. 若a是合法的括號串,則(a)則是合法的括號串
3. 若a,b是合法的括號串,則ab也是合法的括號串。
小a現在希望刪掉s中若干個字元,使得剩下的字串是乙個合法的括號串。小a想知道有多少不同的方案。兩個方案是不同的,當且僅當他們刪除的位置不同。比如當s是(()時,有兩種方案。分別是刪掉第乙個位置,或是刪掉第二個位置。
輸入描述:
第一行乙個整數n,代表s的長度。第二行輸入n個字元。代表串s。
輸出描述:
一行乙個整數,代表不同的方案數。答案對10^9+7取模。
示例1
輸入 8
)(()(())
輸出 30
一道經典dp題,我們可以根據題目分情況討論,若是「(」則可從i往前更新,否則就從1往i更新,這樣就行了。
上**
#include
#define ll long long
using
namespace
std;
const ll mod=1e9+7;
ll n,dp[10010];
char s[10010];
int main()
printf("%lld\n",(dp[1]-1+mod)%mod);
return
0;}
2020牛客NOIP賽前集訓營 提高組(第四場)
有 f n 2 f 2 f 1 f 2 f 2 f 2 令 g n f n 2 很自然的有 g n 2g 2g g 將遞推式寫成矩陣的形式 a 令 vec n 為 g n,g g t 可以逆推出 vec 0 把 vec 表示成 a n vec 將題目中的 f s sum limits g sum l...
牛客CSP S提高組賽前集訓營2
然後隨便用乙個資料結構維護一下就行了,我寫的線段樹。我們先找出每個環,然後我們先刪連線環的邊,每刪一條就可以多產生乙個聯通塊,在考慮刪環邊,發現從最大的環刪起一定最優 因為你刪的第一條邊得不到任何新的聯通塊 就很容易想到tar jantarjan tarjan 發現你只能寫出80 8080 分,因為...
牛客CSP S提高組賽前集訓營1
比賽鏈結 官方題解 before t1觀察 結論題,t2樹形dp,可以換根或up down,t3正解妙,轉化為圖上問題。題目質量不錯,但資料太水了 一共n個石子堆,每個石子堆有ai個石子,兩人輪流對石子塗色 先手塗紅,後手塗藍 且需要保證當前回合塗的石子顏色不能和它相鄰的兩個同色,誰塗不下去誰輸。一...