HDU 4323 Contest 3

本文介绍了一个基于动态规划实现的编辑距离算法,通过枚举的方法来解决字符串间的相似度计算问题。该算法通过比较两个字符串之间的差异,计算出将一个字符串转换为另一个字符串所需的最小编辑操作数。

编辑距离,经典的了。动态规划枚举即过。

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;

char bgn[1505][15];
char tmp[15];
int dp[15];
int main(){
	int T,n,m,kase=0,e,cnt,pre,tpre;
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&m);
		getchar();
		for(int i=1;i<=n;i++){
			gets(bgn[i]);
		}
		printf("Case #%d:\n",++kase);
		for(int c=1;c<=m;c++){
			cnt=0;
			scanf("%s",tmp);
			scanf("%d",&e);
			for(int i=1;i<=n;i++){
				dp[0]=0;
				int sb=strlen(bgn[i]);
				int st=strlen(tmp);
				for(int p=1;p<=sb;p++)
				dp[p]=p;
				for(int p=1;p<=sb;p++){
					pre=dp[0];
					dp[0]=p;
					for(int k=1;k<=st;k++){
						tpre=dp[k];
						dp[k]=min(pre+(bgn[i][p-1]==tmp[k-1]?0:1),min(dp[k]+1,dp[k-1]+1));
						pre=tpre;
					}
				}
				if(dp[strlen(tmp)]<=e)
				cnt++;
			}
			printf("%d\n",cnt);
		}
	}
	return 0;
}

  

转载于:https://www.cnblogs.com/jie-dcai/p/4085643.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值