经典dp 编辑距离
给定两个字符串S和T,对于T我们可以进行三种操作
(1)在任意位置增加字符
(2)删除字符
(3)替换字符
问最少多少次能把T变成S?
设f(i,j)是S的前i位和T的前j位对齐的最小花费
接下来分析每一位
(1)如果S[i]==T[j],就不用任何修改,那么最小花费是f(i-1,j-1)
(2)如果S[i]!=T[j],那么最小花费是f(i-1,j-1)+1
(3)如果S的前i位已经和T的前(j-1)位对齐了,那么最小花费是f(i,j-1)+1
(4)如果S的前(i-1)位已经和T的前j位对齐了,那么最小花费是f(i-1,j)+1
综上,递推式是f(i,j)=min(f(i,j)+cost,f(i-1,j)+1,f(i,j-1)+1)
最后分析一下初值:
f(i,0)=i
f(0,j)=j
这就相当与把S或T的前i或j位全部删除的样子(好残忍……)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int f[][];
int main()
{
char a[],b[];
int lena,lenb,i,j,cost,mincost;
while(~scanf("%s%s",a,b))
{
lena=strlen(a);
lenb=strlen(b);
for(i=; i<lena; i++)
f[i][]=i;
for(i=; i<lenb; i++)
f[][i]=i;
for(i=; i<=lena; i++)
for(j=; j<=lenb; j++)
{
if(a[i-]==b[j-]) cost=;
else cost=;
mincost=min(f[i][j-]+,f[i-][j]+);
f[i][j]=min(mincost,f[i-][j-]+cost);
}
printf("%d\n",f[lena][lenb]);
memset(f,,sizeof(f));
}
return ;
}
经典dp 编辑距离的更多相关文章
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- poj1458 求最长公共子序列 经典DP
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 45763 Accepted: 18 ...
- NYOJ - 矩形嵌套(经典dp)
矩形嵌套时间限制:3000 ms | 内存限制:65535 KB 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b< ...
- 51nod 1412 AVL树的种类(经典dp)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1412 题意: 思路: 经典dp!!!可惜我想不到!! $dp[i][k] ...
- NYOJ 16 矩形嵌套(经典DP)
http://acm.nyist.net/JudgeOnline/problem.php?pid=16 矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度: ...
- poj 1050 To the Max 最大子矩阵和 经典dp
To the Max Description Given a two-dimensional array of positive and negative integers, a sub-rect ...
- CS Academy Distinct Neighbours(经典dp)
CS Academy Distinct Neighbours(经典dp) 题意: 求相邻无相同数字的合法的排列数 题解: 题解 先将相同的数字分为一类,假设共有n组 定义\(dp[i][j]\)表示前 ...
- 【经典dp 技巧】8.13序列
经典的拆绝对值 题目大意 给定$n$个具有顺序的序列,允许对每个序列循环移动.记第$i$个序列尾元素为$x$,$i+1$个序列首元素为$y$,定义其连接收益为$|x-y|*i$,求$n$个序列连接最大 ...
- POJ 1160:Post Office 邮局经典DP
Post Office Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17168 Accepted: 9270 Desc ...
随机推荐
- hadoop(一)
1 环境熟悉安装jdk.hadoop配置xml文件,启动伪分布式运行example-jar,测试mapreduce程序2 mapreduce编程使用eclipse开发mapreduce程序,导出jar ...
- 使用SLT 工具从SAP导入数据到SAP HANA的监控
使用SLT工具从SAP导入数据到SAP HANA主要有两种方式监控, 一是在SAP SLT服务器上使用以下T-Code: IUUC_SYNC_MON MWBMON 二是在SAP HANA Studio ...
- jsp中使用java函数
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> ${fn ...
- PDF在线阅读 FlexPaper 惰性加载 ;
关于PDF在线阅读问题,比较普遍的做法是转换成swf文件来浏览:由于项目需要,就用 flexpaper 来实现了下,功能比较简单:但是文件的惰性加载确实让笔者挠头了一把! 下面是笔者的方法: 采用流的 ...
- BestCoder 百度之星2016
20160523 百度之星初赛第一场 1001 All X Problem Description F(x, m)F(x,m) 代表一个全是由数字xx组成的mm位数字.请计算,以下式子是否成立: F( ...
- mysql随记
.frm是描述了表的结构,.MYD保存了表的数据记录,*.MYI则是表的索引 ibd是MySQL数据文件.索引文件,无法直接读取. ibdata是innodb引擎使用的 如果是使用myisam引擎 则 ...
- cmd 进入mysql
从cmd中进入MySQL的命令界面 1.开始中找出运行:输入cmd2.查找appserv所在盘,我的在D盘,所以接着输入:d:3.在d盘中查找mysql所在目录:cd appserv\mysql\bi ...
- springmvc集成aop记录操作日志
首先说明一下,这篇文章只做了记录日志相关事宜 具体springmvc如何集成配置aop对cotroller进行拦截,请看作者的另一篇文章 http://www.cnblogs.com/guokai87 ...
- Javascript封装弹出框控件
1.首先先定义好弹出框的HTML结构 <div class="g-dialog-contianer"> <div class="dialog-windo ...
- Java源程序结构
完整的java源程序应该包括下列部分: 1.package语句 l java编译器为每个类生成一个字节码文件,且文件名与类名相同,这就会带来一个问题:同名的类会发生冲突. l 所以package的两个 ...