求助,过不了拍
查看原帖
求助,过不了拍
746761
zzb1217楼主2024/10/24 15:57
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 505, mod = 998244353;
int n, ans = 0, dp[N][N], f[N][N];
string a;
int mp(char c) {
	if (c == '?') return 5;
	if (c == '(') return -1;
	if (c == ')') return 1;
	if (c == '[') return -2;
	if (c == ']') return 2;
	if (c == '{') return -3;
	if (c == '}') return 3;
}
int check(char c, char c2) {
	if ((c=='('&&c2=='?')||(c=='['&& c2=='?')||(c=='{'&& c2=='?')||(c=='?'&&c2==')')||(c == '?'&&c2==']')||(c=='?'&&c2=='}')||(mp(c)+mp(c2)==0)) {
		return 1;	
	}
	else if (c=='?'&&c2=='?') {
		return 3;
	}
	else return 0;
}
signed main() {
	freopen("toad.in","r",stdin);
	freopen("toad.out","w",stdout);
	cin >> n >> a;
	a = ' ' + a;
	for (int len = 0; len <= n; len += 2) {
		for (int i = 1; i + len - 1 <= n; ++i) {
			int j = i + len - 1;
			if (len == 0) {
				dp[i][j] = 1;
				continue;
			}
			f[i][j] = check(a[i], a[j]);
			dp[i][j] += dp[i + 1][j - 1] * f[i][j];
			dp[i][j] %= mod;
			f[i][j] = dp[i][j] % mod;
			for (int k = i + 1; k < j; ++k) {
				dp[i][j] += (dp[i][k] * f[k + 1][j]);
				dp[i][j] %= mod;
			}	
		}
	}
//	if (dp[1][n] == 1) cout << 0;
	cout << dp[1][n] % mod;
	return 0;
}
/*
10
(?([?)]?}?
*/

2
)(

hack了

2024/10/24 15:57
加载中...