题意:编辑距离。。
思路: 暴力dp
#include<stdio.h>
#include<string.h>
int dp[15][15],len1,len2;
char s[1530][15],t[15];
int min(int a,int b,int c)
{
if(b<a)
a=b;
if(c<a)
a=c;
return a;
}
void my_dp(int pos) //计算字符串s[pos]和t的编辑距离
{
int i,j,dp1,dp2,dp3;
len1=strlen(s[pos]);
len2=strlen(t);
for(i=0;i<=len1;i++)
dp[i][0]=i;
for(j=0;j<=len2;j++)
dp[0][j]=j;
for(i=0;i<len1;i++)
for(j=0;j<len2;j++){
dp1=dp[i][j+1]+1;
dp2=dp[i+1][j]+1;
dp3=dp[i][j];
if(s[pos][i]!=t[j])
dp3++;
dp[i+1][j+1]=min(dp1,dp2,dp3);
}
}
int main()
{
int m,n,T,i,k,a,ans;
scanf("%d",&T);
for(k=1;k<=T;k++){
printf("Case #%d:\n",k);
scanf("%d%d",&m,&n);
for(i=1;i<=m;i++)
scanf("%s",s[i]);
while(n--){
scanf("%s%d",t,&a);
ans=0;
for(i=1;i<=m;i++){
my_dp(i);
if(dp[len1][len2]<=a)
ans++;
}
printf("%d\n",ans);
}
}
return 0;
}