滚动前7AC+3WA
#include <bits/stdc++.h>
//#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define size(s) ((int)s.size())
#define pf(x) push_front(x)
#define endl "\n"
using namespace std;
int inline solve();
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
int t=1;//cin >> t;
while(t--) solve();
return 0;
}
/*----------------------------------------------------------------------------------------------------solution----------------------------------------------------------------------------------------------------*/
const int N=510,mod=1024523;
int n,m,dp[N][N][N],ans;
string s,t;
void inline update(int& res,int val){
res=((res%mod+val%mod)%mod+mod)%mod;
}
int inline solve(){
cin >> n >> m >> s >> t;
dp[0][0][0]=1;
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
for(int k=0;k<=i+j && k<=n;k++){
int l=i+j-k;
if(l>m) continue;
if(i<n && k<n && s[i]==s[k]) update(dp[i+1][j][k+1],dp[i][j][k]);
if(j<m && k<n && t[j]==s[k]) update(dp[i][j+1][k+1],dp[i][j][k]);
if(i<n && l<m && s[i]==t[l]) update(dp[i+1][j][k],dp[i][j][k]);
if(j<m && l<m && t[j]==t[l]) update(dp[i][j+1][k],dp[i][j][k]);
}
}
}
cout << dp[n][m][n] << endl;
return 0;
}
滚动后:10WA
#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define size(s) ((int)s.size())
#define pf(x) push_front(x)
#define endl "\n"
using namespace std;
int inline solve();
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t=1;//cin >> t;
while(t--) solve();
return 0;
}
/*----------------------------------------------------------------------------------------------------solution----------------------------------------------------------------------------------------------------*/
const int N=510,mod=1024523;
int n,m,dp[2][N][N],ans,idx;
string s,t;
void inline update(int& res,int val){
res=((res%mod+val%mod)%mod+mod)%mod;
}
int inline solve(){
cin >> n >> m >> s >> t;
dp[idx][0][0]=1;
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
for(int k=0;k<=i+j && k<=n;k++){
int l=i+j-k;
if(l>m) continue;
if(i<n && k<n && s[i]==s[k]) update(dp[idx^1][j][k+1],dp[idx][j][k]);
if(j<m && k<n && t[j]==s[k]) update(dp[idx][j+1][k+1],dp[idx][j][k]);
if(i<n && l<m && s[i]==t[l]) update(dp[idx^1][j][k],dp[idx][j][k]);
if(j<m && l<m && t[j]==t[l]) update(dp[idx][j+1][k],dp[idx][j][k]);
}
}
memset(dp[idx],0,sizeof(dp[idx]));
idx^=1;
}
cout << dp[idx][m][n] << endl;
return 0;
}