一直爆零
#include<bits/stdc++.h>
using namespace std;
char a[1010],b[210];int n,m,k,mod=1000000007;
int f[2][210][210][2],bb[1010];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){cin>>a[i];}
for(int i=1;i<=m;i++){
cin>>b[i];
}
for(int i=1;i<=n;i++){
if(a[i]==b[1]){
bb[i]=bb[i-1]+1;
}
else{
bb[i]=bb[i-1];
}
}
f[0][1][1][1]=f[1][1][1][1]=1;
for(int i=1;i<=n;i++){
if(a[i]==b[1]){
f[1][1][1][0]=b[i-1];
f[1][1][1][1]=1;
}
else{
f[1][1][1][1]=0;
f[1][1][1][0]=b[i-1];
}
for(int j=1;j<=m;j++){
for(int l=1;l<=min(k,j);l++){
if(a[i]!=b[i]){
f[1][j][l][1]=0;f[1][j][l][0]=(f[0][j][l][0]+f[0][j][l][1])%mod;
}
else{
f[1][j][l][0]=(f[0][j][l][0]+f[0][j][l][1])%mod;
f[1][j][l][1]=(f[0][j-1][l-1][1]+f[0][j-1][l-1][0]+f[0][j-1][l-1][1])%mod;
}
}
}
for(int cntj=1;cntj<=m;cntj++){
for(int cntl=1;cntl<=min(k,cntj);cntl++){
for(int w=0;w<=1;w++){
f[0][cntj][cntl][w]=f[1][cntj][cntl][w];
}
}
}
}
cout<<(f[1][m][k][1]+f[1][m][k][0])%mod;
return 0;
}