全部评论 2

  • ddd

    2026-02-25 来自 浙江

    0
  • #include<bits/stdc++.h>
    using namespace std;
    long long dp[510][510][6],n,k;
    const long long mod=1000000007;
    char s[510];
    bool cmp(long long x,long long y){
    return (s[x]'('&&s[y]')'||s[x]'('&&s[y]'?'||s[x]'?'&&s[y]')'||s[x]'?'&&s[y]'?');
    }
    int main(){
    cin>>n>>k;
    scanf("%s",s+1);
    for(int i=1;i<=n;i++){
    //cin>>s[i];
    dp[i][i-1][0]=1;
    }
    for(int len=1;len<=n;len++){
    for(int l=1;l<=n-len+1;l++){
    int r=l+len-1;
    if(len<=k)dp[l][r][0] = dp[l][r-1][0] && (s[r]'*'||s[r]'?');
    if(len>=2){
    // 不允许(SAS),所以没有5,3包含了1,所以没有1
    if(cmp(l,r))dp[l][r][1]=(dp[l+1][r-1][0]+dp[l+1][r-1][2]+dp[l+1][r-1][3]+dp[l+1][r-1][4])%mod;
    for(int i=l;i<r;i++){
    dp[l][r][2]=(dp[l][r][2]+dp[l][i][3]*dp[i+1][r][0])%mod;
    dp[l][r][3]=(dp[l][r][3]+(dp[l][i][2]+dp[l][i][3])*dp[i+1][r][1])%mod;
    dp[l][r][4]=(dp[l][r][4]+(dp[l][i][4]+dp[l][i][5])*dp[i+1][r][1])%mod;
    dp[l][r][5]=(dp[l][r][5]+dp[l][i][4]*dp[i+1][r][0])%mod;
    }
    }
    dp[l][r][5]=(dp[l][r][5]+dp[l][r][0])%mod;
    dp[l][r][3]=(dp[l][r][3]+dp[l][r][1])%mod;
    }
    }
    printf("%lld\n",dp[1][n][3]);

    return 0;
    

    }

    2026-02-15 来自 浙江

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页