openjudge-NOI 2.6-2988 计算字符串距离
题目链接:http://noi.openjudge.cn/ch0206/2988/
题解:
首先,题目有误,少了一个添加操作
和求解LCS之类的思路类似
f[i][j]表示a序列中1..i的部分和b序列中1...j的部分的编辑距离,得:
(1)i==0,j==0时,f[i][j]=0;
(2)i==0,j>0时,f[i][j]=j;j==0,i>0时,f[i][j]=i;即需要对空串进行i或j个添加操作;
(3)否则,f[i][j]=min(f[i-1][j]+1,f[i][j-1]+1,f[i-1][j-1]+check(i,j));(check函数:ai==bj返回1否则0)
<1>默认a[1...i-1]和b[1...j]已经处理好时,只需要在ai-1后添加一个bj使a[1...i]与b[1...j]相同
<2>默认a[1...i]和b[1...j-1]已经处理好时,只需要在bj-1后添加一个ai使a[1...i]与b[1...j]相同
<3>默认a[1...i-1]和b[1...j-1]已经处理好时,如果ai==bj,即不需要进行操作,否则需要对ai或者bj进行一次修改操作,使a[1...i]与b[1...j]相同
#include<cstdio>
#include<cstring>
#define MAXN 1010
int lena,lenb,f[MAXN][MAXN];
char a[MAXN],b[MAXN];
inline int min(int x,int y)
{
return x<y?x:y;
}
bool check(int x,int y)
{
return a[x]==b[y]?true:false;
}
int main()
{
int T;
scanf("%d\n",&T);
while(T--)
{
memset(f,,sizeof(f));
scanf("%s%s",a+,b+);
lena=strlen(a+);lenb=strlen(b+);
for(int i=;i<=lena;++i)f[i][]=i;
for(int i=;i<=lenb;++i)f[][i]=i;
f[][]=;
for(int i=;i<=lena;++i)
{
for(int j=;j<=lenb;++j)
{
f[i][j]=min(min(f[i-][j],f[i][j-])+,f[i-][j-]+!(check(i,j)));
}
}
printf("%d\n",f[lena][lenb]);
}
return ;
}
openjudge-NOI 2.6-2988 计算字符串距离的更多相关文章
- 【noi 2.6_2988】计算字符串距离(DP)
题意: 给两个字符串,可以增.删.改,问使这两个串变为相同的最小操作数. 解法:(下面2种的代码主要区别在初始化和,而状态转移方程大家可挑自己更容易理解的方法打) 1.f[i][j]表示a串前i个和b ...
- Stanford NLP 课程笔记之计算字符串距离
在自然语言处理任务中,有时候需要计算两个字符串之间的相似度,也可以称作是两者之间的距离,用最小编辑距离表示. 最小编辑距离用{Insertion,Deletion,Substitution}这三种操作 ...
- php实现 计算字符串的距离
php实现 计算字符串的距离 一.总结 一句话总结:解决dp问题最好的方法是什么:分析出状态后 实例+画表. 1.解决dp问题最好的方法是什么? 分析出状态后 实例+画表 2.画图的好处? 画出来表之 ...
- Spark Java API 计算 Levenshtein 距离
Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...
- Levenshtein字符串距离算法介绍
Levenshtein字符串距离算法介绍 文/开发部 Dimmacro KMP完全匹配算法和 Levenshtein相似度匹配算法是模糊查找匹配字符串中最经典的算法,配合近期技术栏目关于算法的探讨,上 ...
- PHP中计算字符串相似度的函数代码
similar_text — 计算两个字符串的相似度 int similar_text ( string $first , string $second [, float &$percent ...
- php计算字符串长度
/** * 计算字符串的长度(非字节) * 先用正则将字符串分解为个体单元,然后再计算单元的个数即得出字符串的长度 * from wordpress * @param string $string * ...
- [转载] python 计算字符串长度
本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函 ...
- C# 计算字符串在控制台中的显示长度
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
随机推荐
- POJ 3276 Face The Right Way(前缀和优化)
题意:有长度为N的01串,有一个操作可以选择连续K个数字取反,求最小的操作数和最小的K使得最后变成全1串.(N<=5000) 由于K是不定的,无法高斯消元. 考虑枚举K,求出最小的操作数. 显然 ...
- CPP 替代 PIL 图片处理(缩略图生成)
python中使用PIL(Pyhton Image Library)进行图片处理,好处就是编写简单方便,但是不能很好利用机器多核的特点,于是在项目中决定使用cpp来实现图片处理. 项目中的图片处理主要 ...
- 什么是P问题,NP问题和NPC问题
转载自:Matrix67的博客 什么是P问题.NP问题和NPC问题 这或许是众多OIer最大的误区之一. 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问 ...
- Linux内核分析第二周--操作系统是如何工作的
Linux内核分析第二周--操作系统是如何工作的 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- Hadoop1.2.1异常No route to host
Hadoop1.2.1异常Bad connect ack with firstBadLink (No route to host ) 0.说明 Hadoop集群之前运行正常,增加了新节点之后,需要执行 ...
- pycrypto 安装
https://www.dlitz.net/software/pycrypto/ 下载pycrypto-2.6.1.tar.gz,解压后 python setup.py build python se ...
- ibatis中:org.springframework.jdbc.UncategorizedSQLException:异常
SQL 查询语句异常,可能是你的查询语句写错了,或者是你的映射的类和或数据中与表不对应,检查你的映射配置文件.
- Linux系统之路——如何在CentOS7.2安装R和RStudio(Server)
使用ubuntu的小伙伴们直接使用命令sudo apt-get install r-base-dev或者r-base搞定.然而对于使用centos的我却一直卡在安装这一步,十分的悲催,只有羡慕的份,但 ...
- C++并发编程 异步任务
C++并发编程 异步任务 异步任务 std::async (1) std::async 会返回一个 std::future 对象, 这个对象持有最终计算出来的结果. 当需要这个值时, 只需要调用对象的 ...
- 对于redis底层框架的理解(一)
近期学习了redis底层框架,好多东西之前都没听说过,算是大开眼界了. 先梳理下redis正常的通讯流程吧 首先服务器启动都有主函数main,这个main函数就在redis.c里 首先是initser ...