LOADING

加载过慢请开启缓存,浏览器默认开启

daily 1

2023/6/6 daily

CF 629C

void solve(){
  int n,m;
  cin>>n>>m;
  string s;
  cin>>s;
  s=')'+s;
  vector dp(2001,vector<ll>(2001));
  dp[0][0]=1;
  for(int i=1;i<=2000;++i){
    dp[i][0]=dp[i-1][1];
    for(int j=1;j<=i;++j){
        dp[i][j]=(dp[i-1][j-1]+dp[i-1][j+1])%MOD;
    }
  }
  int min_bs=0,bs=0;
  for(int i=1;i<=m;++i){
    if(s[i]=='(')++bs;
    else --bs;
    min_bs=min(bs,min_bs);
  }
  ll ans=0;
  for(int i=0;i<=n-m;++i){
    for(int j=0;j<=i;++j){
        if(j+min_bs>=0 && j+bs<=n-m-i){
            ans=(ans+(dp[i][j]*dp[n-m-i][j+bs])%MOD)%MOD;
        }
    }
  }
  cout<<ans<<'\n';
  return;
}