为什么RE,怎么改
查看原帖
为什么RE,怎么改
537627
_LSA_楼主2022/3/31 19:00
#include<bits/stdc++.h>
#define FO(x)\
freopen(#x".in","r",stdin);\
freopen(#x".out","w",stdout);
using namespace std;
const int mod = 1e9+7;
const int MAX = 410;
int n,m,ans;
char a[MAX],b[MAX];
int c[MAX];
long long f[MAX][MAX][MAX];
int main(){
	//FO(string);
	//ios::sync_with_stdio(false);
	int T;
	cin >> T;
	while(T--){
		cin >> n >> m;
		memset(f,0,sizeof(f));
		cin >> a+1; cin >> b+1;
		f[0][0][0] = 1;
		for(int i=1;i<=n;i++)
			if(a[i] == '-')
				c[i] = c[i-1]-1;
			else
				c[i] = c[i-1]+1;
		for(int i=1;i<=n;i++)
			for(int j=0;j<=min(i,c[i-1]);j++)
				for(int k=0;k<=c[i-1]-j;i++){
					int l = c[i-1]-k-j;
					if(a[i] == '-'){
						if(k)
							f[i][j][k-1] = (f[i-1][j][k]+f[i][j][k-1])%mod;
						if(l)
							f[i][j][k] = (f[i][j][k]+f[i-1][j][k])%mod;
					}
					else{
						f[i][j][k] = (f[i][j][k]+f[i-1][j][k])%mod;
						if(j == 0 && l == 0)
							f[i][j][k+1] = (f[i][j][k+1]+f[i-1][j][k])%mod;
						if(a[i] == b[j+1] && l == 0)
							f[i][j+1][k] = (f[i-1][j][k]+f[i][j+1][k])%mod;
					}
				}
		cout << f[n][m][0] << "\n";
	}
	return 0;
}
2022/3/31 19:00
加载中...