hdu4323编辑距离

#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<map>
#include<cstdio>
#include<cstring>
#define maxn 1505
#define INF 0xfffffff
#define min(a,b) a<b?a:b
#define max(a,b) a>b?a:b
using namespace std;
int n,m,num;
char s1[maxn][20],s2[20];
int dp[20][20];
int Min(int x,int y,int z)
{
    if(x>y)
    x=y;
    if(x>z)
    x=z;
    return x;
}
int DP()
{
    int count=0;
    for(int i=0;i<n;i++)
    {
        int la=strlen(s1[i]);
        int lb=strlen(s2);
        for(int j=0;j<=la;j++)
        dp[j][0]=j;
        for(int j=0;j<=lb;j++)
        dp[0][j]=j;
        for(int j=0;j<la;j++)//s1[i]
        {
            for(int k=0;k<lb;k++)//s2
            {
                dp[j+1][k+1]=Min(((s1[i][j]==s2[k]?0:1)+dp[j][k]),dp[j][k+1]+1,dp[j+1][k]+1);
            }
        }
        if(dp[la][lb]<=num)
        count++;
    }
    return count;
}
int main()
{
    int t;
    scanf("%d",&t);
    int tt=1;
    while(t--)
    {
        scanf("%d %d",&n,&m);
        for(int i=0;i<n;i++)
        {
            scanf("%s",s1[i]);
        }
        printf("Case #%d:\n",tt++);
        for(int j=1;j<=m;j++)
        {

            scanf("%s %d",s2,&num);
            printf("%d\n",DP());
        }
    }
	return 0;
}


你可能感兴趣的:(hdu4323编辑距离)