提交时间:2025-11-19 19:28:42
运行 ID: 38929
#include<bits/stdc++.h> #define int long long using namespace std; const int N=2e3+10,P=998244353; int n,rem[N][N],cnt; string s,c; int dfs(int x,int t,int y,int z) { if(t==0)return 1; if(t<0)return 0; if(rem[x][y]!=-1) { //cout<<x+1<<" "<<y<<" "<<rem[x][y]<<'\n'; return rem[x][y]%P; } if(x==t) { if(y==(t-z)/2) { return 1; } return 0; } int gx=0; if(y>(x-z)/2&&x!=0) gx=(gx+dfs(x+1,t,y,z))%P; gx=(gx+dfs(x+1,t,y+1,z))%P; rem[x][y]=gx%P; return gx%P; } signed main() { //freopen("bracket.in","r",stdin); //freopen("bracket.out","w",stdout); cin>>n>>s; int t=0,u=0; for(int i=0;i<n;i++) { if(s[i]==')') { int l=n-i; if(l>=2) { memset(rem,-1,sizeof(rem)); cnt=(cnt+dfs(0,l,0,t-u))%P; //cout<<i+1<<" "<<dfs(0,l,0,t-u)<<"\n"; } } if(s[i]=='(') { t++; } else { u++; } if(t<(i+2)/2) { break; } } cout<<cnt+1<<"\n"; /* memset(rem,-1,sizeof(rem)); cout<<dfs(0,n,0)<<"\n";*/ return 0; }