(DP)51NOD 1183 编辑距离
第1行:字符串a(a的长度 <= 1000)。
第2行:字符串b(b的长度 <= 1000)。
输出a和b的编辑距离
kitten
sitting
3
解:
具体介绍:https://www.51nod.com/tutorial/course.html#!courseId=3
我们以矩阵形式实现了教程中的比较思想。
以字符串dabcd和acdc为例,演示流程:
(第二行与第二列预置,之后的数字由其对应行列字母与上,左,左上数字决定。
具体操作:首先比较对应行列字母,若一样则填入左上数据,
否则填入上,左,左上数字的最小值加一。)

#include<stdio.h> char a[], b[];
int dp[][]; int min(int a, int b, int c)
{
b = b < a ? b : a;
return (c < b ? c : b);
} int main()
{
while (scanf_s("%s%s", a, , b, ) != EOF)
{
int i, j;
for (i = ; i == || a[i - ] != ; i++)
for (j = ; j == || b[j - ] != ; j++)
if (i == || j == ) dp[i][j] = i | j;
else if (a[i - ] == b[j - ]) dp[i][j] = dp[i - ][j - ];
else dp[i][j] = min(dp[i - ][j - ], dp[i - ][j], dp[i][j - ]) + ;
printf("%d\n", dp[i - ][j - ]);
}
return ;
}
由于该方法顺序的检索顺序,我们可以优化空间消耗,减小数组dp的大小:
#include<stdio.h> char a[], b[];
int dp[][]; int min(int a, int b, int c)
{
b = b < a ? b : a;
return (c < b ? c : b);
} int main()
{
while (scanf_s("%s%s", a, , b, ) != EOF)
{
int i, j;
for (i = ; != a[i]; i++) dp[][i + ] = i + ;
for (i = ; != a[i - ]; i++)
{
dp[i & ][] = i;
for (j = ; != b[j - ]; j++)
{
if (a[i - ] == b[j - ]) dp[i & ][j] = dp[i + & ][j - ];
else dp[i & ][j] = min(dp[i & ][j - ], dp[i + & ][j - ], dp[i + & ][j]) + ;
}
}
printf("%d\n", dp[i + & ][j - ]);
}
return ;
}
(DP)51NOD 1183 编辑距离的更多相关文章
- 51nod 1183 编辑距离(dp)
题目链接:51nod 1183 编辑距离 #include<cstdio> #include<cstring> #include<algorithm> using ...
- 51nod 1183 - 编辑距离 - [简单DP][编辑距离问题][Levenshtein距离问题]
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 编辑距离,又称Levenshtein距离(也叫做Edi ...
- 51nod 1183 编辑距离【线性dp+类似最长公共子序列】
1183 编辑距离 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个 ...
- 51nod 1183 编辑距离
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183. 题意不再赘述. 分析:大概和LCS差不多的吧 但是我用LCS ...
- 51Nod 1183 编辑距离 (字符串相似算法)
编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除 ...
- 51NOD 1183编辑距离(动态规划)
>>点击进入原题测试<< 思路:这个题放在基础题,分值还是零分,好歹也给人家动态规划一点面子啊!刚开始写的想法是找到其最大公共字串,然后用两个字符串中最长字符串的长度减掉最大公 ...
- 动态规划 51nod 1183
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 1183 编辑距离 基准时间限制:1 秒 空间限制:1 ...
- 51 Nod 1183 编辑距离 (动态规划基础)
原题链接:1183 编辑距离 题目分析:这个最少的操作次数,通常被称之为编辑距离."编辑距离"一次本身具有最短的意思在里面.因为题目有"最短"这样的关键词,首先 ...
- POJ 3356 AGTC(DP求字符串编辑距离)
给出两个长度小于1000的字符串,有三种操作,插入一个字符,删除一个字符,替换一个字符. 问A变成B所需的最少操作数(即编辑距离) 考虑DP,可以用反证法证明依次从头到尾对A,B进行匹配是不会影响答案 ...
随机推荐
- 洛谷—— P1536 村村通
P1536 村村通 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府“村村通工程”的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连, ...
- P1455 搭配购买
洛谷——P1455 搭配购买 题目描述 明天就是母亲节了,电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢?听说在某个网站上有卖云朵的,小朋友们决定一同前往去看看这种神奇的商 ...
- Spring错误异常重试框架guava-retrying
官网:https://github.com/rholder/guava-retrying Maven:https://mvnrepository.com/artifact/com.github.rho ...
- Java的发送邮件
以下内容引用自http://wiki.jikexueyuan.com/project/java/sending-email.html: 用Java应用程序来发送一封电子邮件是足够简单的,但是开始时应该 ...
- sql 语句哪里添加单引号问题
1.sql 语句哪里添加单引号问题,哪些地方必须加双引号,否则sql语句会报错? :涉及varchar的值的时候,必须有单引号包括varchar值.int等其他字段类型,则不需要加单引号包括. 如: ...
- jquery 动态添加,降低input表单的方法
html代码例如以下 <html> <tr><button style="margin-left:10px" class="add_fiel ...
- DosBox 报错 this program requires dosxnt.exe to be in your path
也就是少了dosxnt.exe文件,能够上网搜索下载,把dosxnt 拷贝到你挂截文件夹下就能够执行 Dosxnt文件下载
- BZOJ 1122 POI2008 账本BBB 单调队列
题目大意:给定一个由+1和−1构成的长度为n的序列,提供两种操作: 1.将某一位取反,花销为x 2.将最后一位移动到前一位.花销为y 要求终于p+sumn=q.且p+sumi≥0(1≤i≤n),求最小 ...
- Android进阶图片处理之三级缓存方案
图片的三级缓存 一.概述 一開始在学习Android的时候.处理图片的时候,每次获取图片都是直接从网络上面载入图片. 可是在开发项目的过程中,每次点击进入app里面,图片都要慢慢的再一次从网络上面载入 ...
- 全栈JavaScript之路(十六)HTML5 HTMLDocument 类型的变化
HTML5 扩展了 HTMLDocument, 添加了新的功能. 1.document.readState = 'loading' || 'complete' //支持readyState 属性的浏 ...