RT,我的记搜40pts,TLE,求优化
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int sum;
char a[1010],b[210];
int f[1010][110][110];
int DFS(int x,int y,int t){
int ans=0;
if(a[x]!=b[y]||x>=n||y>=m||t>k)return 0;
if(f[x][y][t]){
return f[x][y][t];
}
if(y==m-1){
if(t==k)ans++;
return ans;
}
ans+=DFS(x+1,y+1,t);
for(int i=x+1;i<n;i++){
if(a[i]==b[y+1])ans+=DFS(i,y+1,t+1);
}
f[x][y][t]=ans;
return ans;
}
signed main(){
cin>>n>>m>>k;
cin>>a>>b;
for(int i=0;i<n;i++){
if(a[i]==b[0]){
sum+=DFS(i,0,1);
}
}
cout<<sum;
return 0;
}