如果这样是10分RE
#include<iostream>
using namespace std;
const int maxn=1010,maxm=210,MOD=1000000007;
int n,m,q,f[2][maxm][maxm][2];
char a[maxn],b[maxm];
signed main(){
cin>>n>>m>>q>>a+1>>b+1;
for(int i=1;i<=n;i++){
// cout<<(i&1)<<"\n";
for(int j=1;j<=m;j++){
for(int k=1;k<=q;k++){
f[i&1][j][k][1]=f[i&1][j][k][0]=0;
}
}
if(a[i]==b[1]){
f[i&1][1][1][1]=1;
}
for(int j=1;j<=i;j++){
for(int k=1;k<=q;k++){
if(a[i]==b[j]){
f[i&1][j][k][1]+=f[(i-1)&1][j-1][k][1]+f[(i-1)&1][j-1][k-1][0]+f[(i-1)&1][j-1][k-1][1];
f[i&1][j][k][0]=f[(i-1)&1][j][k][0]+f[(i-1)&1][j][k][1];
}
else{
f[i&1][j][k][0]=f[(i-1)&1][j][k][0]+f[(i-1)&1][j][k][1];
}
f[i&1][j][k][1]%=MOD,f[i&1][j][k][0]%=MOD;
}
}
}
cout<<(f[n&1][m][q][0]+f[n&1][m][q][1])%MOD;
return 0;
}
如果把第三行的maxm改成410,第四行改成f[4][maxm][maxm][2],就AC了
#include<iostream>
using namespace std;
const int maxn=1010,maxm=410,MOD=1000000007;
int n,m,q,f[4][maxm][maxm][2];
char a[maxn],b[maxm];
signed main(){
cin>>n>>m>>q>>a+1>>b+1;
for(int i=1;i<=n;i++){
// cout<<(i&1)<<"\n";
for(int j=1;j<=m;j++){
for(int k=1;k<=q;k++){
f[i&1][j][k][1]=f[i&1][j][k][0]=0;
}
}
if(a[i]==b[1]){
f[i&1][1][1][1]=1;
}
for(int j=1;j<=i;j++){
for(int k=1;k<=q;k++){
if(a[i]==b[j]){
f[i&1][j][k][1]+=f[(i-1)&1][j-1][k][1]+f[(i-1)&1][j-1][k-1][0]+f[(i-1)&1][j-1][k-1][1];
f[i&1][j][k][0]=f[(i-1)&1][j][k][0]+f[(i-1)&1][j][k][1];
}
else{
f[i&1][j][k][0]=f[(i-1)&1][j][k][0]+f[(i-1)&1][j][k][1];
}
f[i&1][j][k][1]%=MOD,f[i&1][j][k][0]%=MOD;
}
}
}
cout<<(f[n&1][m][q][0]+f[n&1][m][q][1])%MOD;
return 0;
}