这题能否用记忆化
查看原帖
这题能否用记忆化
1284088
meifan666楼主2024/8/27 19:34

RT,我的记搜4040pts,TLETLE,求优化

#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){//x表示a的第几个,y表示b的第几个,t表示几个子串 
	int ans=0; 
	if(a[x]!=b[y]||x>=n||y>=m||t>k)return 0;
//	printf("%d %d %d   \n",x,y,t);
	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;
}
2024/8/27 19:34
加载中...