rt,本题使用 string 直接输入括号串只有 2 分,但使用 char 依次输入每个字符即可 AC。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=3e5+4,mod=1e9+9;
ll n,dp[3][N];
string s;
int main()
{
cin>>n;
scanf("%s",&s[1]);//从地址 1 开始输入,方便后续操作
dp[0][0]=1;
for(ll i=1; i<=n; i++)
for(ll j=0; j<=min(i,n-i); j++){
if(s[i]==')' || !j)
dp[i&1][j]=dp[(i+1)&1][j+1];
else
dp[i&1][j]=(dp[(i+1)&1][j+1]+dp[(i+1)&1][j-1])%mod;
dp[i&1][j]%=mod;
}
cout<<dp[n&1][0];
return 0;
}
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=3e5+4,mod=1e9+9;
ll n,dp[3][N];
char c;
int main()
{
cin>>n;
dp[0][0]=1;
for(ll i=1; i<=n; i++){
cin>>c;//直接输入括号串的每个字符
for(ll j=0; j<=min(i,n-i); j++){
if(c==')' || !j)
dp[i&1][j]=dp[(i+1)&1][j+1];
else
dp[i&1][j]=(dp[(i+1)&1][j+1]+dp[(i+1)&1][j-1])%mod;
dp[i&1][j]%=mod;
}
}
cout<<dp[n&1][0];
return 0;
}