注:本人码风较差,请谅解
#include<bits/stdc++.h>
using namespace std;
long long n,fk,dp[1000][1000][2],saf[1000],sun[1000],m=1000000007;
string s;
int main(){
cin>>n>>fk>>s;
for(long long j=0;j<n;j++){
long long ck=n-1;
for(long long l=j+1;l<=min(j+fk,n-1);l++){
if(s[l]=='(' || s[l]==')'){
ck=l-1;break;
}
}
saf[j]=ck+1;
}
for(long long j=0;j<n-1;j++){
if((s[j]=='?' || s[j]=='(')&&(s[j+1]=='?' || s[j+1]==')')){
dp[j][j+1][0]=dp[j][j+1][1]=1;
}
}
for(long long k=2;k<n;k++){
for(long long l=0;l<n-k;l++){
long long ch=0,r=l+k;
if(s[l]==')' || s[l]=='*' || s[r]=='(' || s[r]=='*'){
continue;
}
for(long long j=l+1;j<r;j++){
if(s[j]!='*' && s[j]!='?'){
ch=1;break;
}
}
if(ch==0 && r-l-1<=fk){
dp[l][r][0]=(dp[l][r][0]+1)%m,dp[l][r][1]=(dp[l][r][1]+1)%m;
}
for(long long r2=r-1;r2>max(l,r-fk-1);r2--){
if(s[r2]!='*' && s[r2]!='?'){
break;
}else{
dp[l][r][0]=(dp[l][r][0]+dp[l+1][r2-1][1])%m,dp[l][r][1]=(dp[l][r][1]+dp[l+1][r2-1][1])%m;
}
}
for(long long l2=l+1;l2<min(r,l+fk+1);l2++){
if(s[l2]!='*' && s[l2]!='?'){
break;
}else{
dp[l][r][0]=(dp[l][r][0]+dp[l2+1][r-1][1])%m,dp[l][r][1]=(dp[l][r][1]+dp[l2+1][r-1][1])%m;
}
}
dp[l][r][0]=(dp[l][r][0]+dp[l+1][r-1][1])%m,dp[l][r][1]=(dp[l][r][1]+dp[l+1][r-1][1])%m;
for(long long l2=0;l2<n;l2++){
sun[l2]=0;
}
for(long long l2=l+1;l2<r;l2++){
sun[l2]=(sun[l2-1]+dp[l2][r][0])%m;
}
for(long long l2=l+1;l2<r;l2++){
dp[l][r][1]=(dp[l][r][1]+dp[l][l2][1]*((sun[min(saf[l2],min(l2+fk+1,r-1))]-sun[l2]+m)%m)%m)%m;
}
}
}
cout<<dp[0][n-1][1];
}
帮帮我吗?我写了1天了