AcWing 899. 编辑距离【这题卡常也太虎了8】
原题链接
简单
作者:
minux
,
2020-05-03 16:02:59
,
所有人可见
,
阅读 667
DP【加上memset就被卡成TLE了】
#include <bits/stdc++.h>
using namespace std;
const int N=1005;
const int M=15;
int n, m;
char S[N][M];
char x[M];
int f[N][N];
int main(){
memset(S, 0x00, sizeof S);
scanf("%d%d", &n, &m);
for(int i=0; i<n; ++i){
scanf("%s", S[i]);
}
while(m--){
//memset(x, 0x00, sizeof x);
int step;
scanf("%s%d", x, &step);
int cnt=0;
for(int k=0; k<n; ++k){
//memset(f, 0x00, sizeof f);
int len_a=strlen(S[k]);
int len_b=strlen(x);
for(int i=1; i<=len_a; ++i) f[i][0]=i;
for(int j=1; j<=len_b; ++j) f[0][j]=j;
for(int i=1; i<=len_a; ++i)
for(int j=1; j<=len_b; ++j){
f[i][j]=min(f[i-1][j], min(f[i][j-1], f[i-1][j-1]))+1;
if(S[k][i-1]==x[j-1]) f[i][j]=min(f[i][j], f[i-1][j-1]);
}
if(f[len_a][len_b]<=step) ++cnt;
}
cout<<cnt<<endl;
}
return 0;
}