样例没过,求助dalao
#include<bits/stdc++.h>
// #pragma GCC optimize(3,"Ofast,no-stack-protector,unroll-loops,fast-math")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,fma,popcnt,tune=native")
using namespace std;
#define int long long
#define kg putchar(' ')
#define endl puts("")
inline int read(){
int vis=1,ans=0;
char x=getchar();
while(x<'0'||x>'9'){
if(x=='-')vis=-1;
x=getchar();
}
while(x>='0'&&x<='9'){
ans=ans*10+x-'0';
x=getchar();
}
return vis*ans;
}
inline void print(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)print(x/10);
putchar(x%10+'0');
}
const int N=590,mod=1e9+7;
int dp[N][N][6];
int n=read(),K=read();
string s;
inline bool check(int l,int r){return (s[l]!='*'&&s[r]!='*')&&(s[l]!=')'&&s[r]!='(');}
inline void Mod(int l,int r,int x){for(int i=x;i<6;i++)dp[l][r][i]%=mod;}
signed main(){
cin>>s;
s=" "+s;
for(int i=1;i<=n;i++){
dp[i][i-1][0]=1;
}
for(int i=1;i<=n;i++){
int l=i,r=i;
dp[l][r][0]=(1+(s[r]=='*'||s[r]=='?')==2);
}
for(int i=2;i<=n;i++){
for(int j=1;j+i-1<=n;j++){
int l=j,r=j+i-1;
if(i<=K)dp[l][r][0]=(dp[l][r-1][0]+(s[r]!='('&&s[r]!=')')==2);
if(check(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][5]);
}
for(int k=l;k<r;k++){
dp[l][r][2]+=(dp[l][k][3]*dp[k+1][r][0]);
dp[l][r][3]+=(dp[l][k][2]+dp[l][k][3])*dp[k+1][r][1];
dp[l][r][4]+=(dp[l][k][5]*dp[k+1][r][0]);
dp[l][r][5]+=(dp[l][k][4]+dp[l][k][5])*dp[k+1][r][1];
Mod(l,r,2);
}
dp[l][r][4]+=dp[l][r][0];
dp[l][r][3]+=dp[l][r][1];
Mod(l,r,0);
}
}
print(dp[1][n][3]);
return 0;
}
/*
dp[l][r][0]表示全是 **********
dp[l][r][1]表示 (...........)
dp[l][r][2]表示(..........).....(....)*****
dp[l][r][3]表示(.....).....(....)
dp[l][r][4]表示******(.......)........(......)*******
dp[l][r][5]表示*****(......)....(....)
*/