45pts求助
查看原帖
45pts求助
791222
lby_commandBlock楼主2024/8/27 22:36
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

const int N = 401;

const int mod = 1e9 + 7;

int t, n, m, dp[N][N][N];

string S, T;

int dfs(int i, int j, int k, int l) {
	if (i > n)
		return (j == m) && (!k) && (!l);
	if (dp[i][j][k])
		return dp[i][j][k];
	int ans = 0;
	if (S[i - 1] == '-') {
		if (k)
			ans = (ans + dfs(i + 1, j, k - 1, l)) % mod;
		if (l)
			ans = (ans + dfs(i + 1, j, k, l - 1)) % mod;
	} else {
		ans = dfs(i + 1, j, k, l + 1) % mod;
		if (!j && !l)
			ans = (ans + dfs(i + 1, j, k + 1, l)) % mod;
		if (S[i - 1] == T[j] && !l)
			ans = (ans + dfs(i + 1, j + 1, k, l)) % mod;
	}
	return dp[i][j][k] = (ans % mod);
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
#ifdef BIG_BANANA_A_BIG_BANANA_YOUR_FEEL_VERY_WORDFUL
	freopen(".in", "r", stdin);
	freopen(".out", "w", stdout);
#endif
	cin >> t;
	while (t--) {
		cin >> n >> m >> S >> T;
		memset(dp, 0, sizeof(dp));
		cout << dfs(1, 0, 0, 0) << endl;
	}
	return 0;
}
2024/8/27 22:36
加载中...