经典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 ...
随机推荐
- Ubuntu 16.04 Django安装和配置
之前有安装和配置过,换了台电脑,再安装和配置,忽然发现差不多都忘记了,这里记录下已备之后查阅. sudo apt-get install python-pip sudo apt-get install ...
- HDU 5884 Sort
二分,验证. 二分$k$,然后进行验证.有一个地方需要注意一下:如果$n$个数,每次合并$k$个,最后一次不能合$k$个,那么一开始需要补$0$之后再合并才是最优的.合并的时候用优先队列合并时间复杂度 ...
- Symfony官方视频教程
视频获取方式,添加Symfony学习群,在群文件中获取,QQ群182983780
- django manage.py 的各种功能
[简介] django-admin.py是Django的一个用于管理任务的命令行工具.本文将描述它的大概用法. 另外,在每一个Django project中都会有一个manage.py.manage. ...
- GL应用方面
1.图和表 2.计算机辅助设计CAD 3.虚拟现实环境 4.数据可视化 5.教学与培训(基于VR) 6.计算机艺术 7.娱乐 8.图像处理 9.用户界面
- spring+springmvc+maven+mybatis整合
jar包依赖:网址search.maven.org 1.spring :spring-core 2. myhabits:myhabits 3.整合spring和myhabits: ...
- 查看Oracle正在执行的任务
select a.program, b.spid, c.sql_text,c.SQL_ID from v$session a, v$process b, v$sqlarea c where a.pad ...
- 【IE6的疯狂之四】IE6文字溢出BUG
在IE6下使用浮动可能会出现文字重复的情况. 在IE6下,浮动层之间有注释文字的话,之前那个浮动层的内容文字就有可能遭遇一个“隐形”的复制,但是代码里查看文字可并没有多出来. 看个例子: XML/HT ...
- 可用fidder测试的一些安全测试点
以下是整理的一些常见的安全渗透测试点 1.用工具fidder抓包拦截篡改服务器端返回的代码,导致下级拥有对上级的访问操作权限 以下是公司开发写的用户角色权限页面跳转 修改普通角色跳转的页面为管理员跳转 ...
- Qt对ini文件的读写
研究了以下Qt下ini文件的读写,不废话,上干货. 写入ini文件 WriteIni.cpp void WriteIni::writeSettings() { QSettings settings(& ...