样例错误求调(玄2关)
查看原帖
样例错误求调(玄2关)
1287433
__ycy1124__楼主2024/9/23 17:29
#include<bits/stdc++.h>
using namespace std;
long long dp[505][505][6];
const int md=1e9+7;
string s;
bool check(int l,int r){
	if((s[l-1]=='?'||s[l-1]=='(')&&(s[r-1]=='?'||s[r-1]==')')){
		return 1;
	}
	return 0;
}
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	cin>>s;
	for(int i=1;i<=n;i++){
		dp[i][i-1][0]=1;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j+i-1<=n;j++){
			if(i<=k&&(s[j-1]=='?'||s[j-1]=='*')){
				dp[j][j+i-1][0]=dp[j+1][j+i-1][0];
			}
			if(i>=2){
				if(check(j,j+i-1)){
					dp[j][j+i-1][1]=dp[j+1][j+i-2][0]+dp[j+1][j+i-2][2]+dp[j+1][j+i-2][3]+dp[j+1][j+i-2][4];
					dp[j][j+i-1][1]%=md;
				}
				for(int k=j;k<j+i-1;k++){
					dp[j][j+i-1][2]+=dp[j][k][3]*dp[k+1][j+i-1][0];
					dp[j][j+i-1][2]%=md;
					dp[j][j+i-1][3]+=(dp[j][k][2]+dp[j][k][3])*dp[k+1][j+i-1][1];
					dp[j][j+i-1][3]%=md;
					dp[j][j+i-1][4]+=dp[j][k][0]*(dp[k+1][j+i-1][3]+dp[k+1][j+i-1][4]);
					dp[j][j+i-1][4]%=md;
					dp[j][j+i-1][5]+=dp[j][k][0]*dp[k+1][j+i-1][2];
					dp[j][j+i-1][5]%=md;
				}
			}
			dp[j][j+i-1][5]=dp[j][j+i-1][5]+dp[j][j+i-1][0];
			dp[j][j+i-1][5]%=md;
			dp[j][j+i-1][3]=dp[j][j+i-1][3]+dp[j][j+i-1][1];
			dp[j][k+i-1][3]%=md;
		}
	}
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=n;j++){
//			for(int k=0;k<=6;k++){
//				printf("%lld ",dp[i][j][k]);
//			}
//		}
//		printf("\n");
//	}
	printf("%lld",dp[1][n][3]);
	return 0;
}
2024/9/23 17:29
加载中...