1276:【例9.20】P2758 编辑距离
题目传送门[(https://www.luogu.com.cn/problem/P2758)]
题目描述
设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:
1、删除一个字符;
2、插入一个字符;
3、将一个字符改为另一个字符;
!皆为小写字母!
输入格式
第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。
输出格式
只有一个正整数,为最少字符操作次数。
输入输出样例
输入 #1
sfdqxbw
gfdgw
输出 #1
4
解
注意到删除A[i] 等价于 在B[i]前 插入
 在A[i]前插入与B[i]相同的元素 等价于 删除 B[i]
 修改A[i] 等价于 修改B[i]
为啥?
因为这样的两种操作,都增加了一次操作次数,最终带来了同样的结果
所以,我们只需要对一个串操作,最终的结果没有影响
只对B操作
f[i][j]表示要使A的前i个元素与B的前j个元素相同的最少操作次数
初始化
f[i][0] = i;
f[0][j] = j;
转移
如果A[i]等于B[i],不做修改,f[i][j] = f[i - 1][j - 1]
否则,三种修改方式,在B中加一个,f[i][j] = f[i - 1][j] + 1;
                   在B中删一个,f[i][j] = f[i][j - 1] + 1;
                    在B中改一个,f[i][j] = f[i - 1][j - 1] + 1;
三者取max
代码
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 2010
#define INF 1061109000
using namespace std; 
int f[N][N], n1, n2;
string a , b;
int main()
{
	cin >> a >> b;
	for (int i = 0 ; i <= a.size() ; i++)
	{
		for (int j = 0 ; j <= b.size() ; j++)
			f[i][j] = INF;
	}
	f[0][0] = 0;
	f[0][1] = 1;
	f[1][0] = 1;
	for (int i = 0 ; i <= a.size() ; i++)	f[i][0] = i;//重要的初始化
	for (int j = 0 ; j <= b.size() ; j++)	f[0][j] = j;//重要的初始化
	//只编辑b[]
	for (int i = 1 ; i <= a.size() ; i++)
	{
		for (int j = 1 ; j <= b.size() ; j++)
		{
				if(a[i - 1] == b[j - 1])
				{
					f[i][j] = f[i - 1][j - 1];
//					cout << i << " " << j << " " << f[i][j] << endl;				
					continue;
				}
				f[i][j] = min(f[i][j], f[i - 1][j - 1] +1);
				f[i][j] = min(f[i][j], f[i][j - 1] + 1);
				f[i][j] = min(f[i][j], f[i - 1][j] + 1);
//				cout << i << " " << j << " " << f[i][j] << endl;
		}
	}
/*	for (int j = 1 ; j <= a.size() ; j++)
	{
		for (int i = 1 ; i <= b.size() ; i++)	cout << f[j][i] << " ";
		cout << endl;
	}
*/
	cout << f[a.size()][b.size()] << endl;
	return 0;
}
												
											1276:【例9.20】P2758 编辑距离的更多相关文章
- 洛谷——P2758 编辑距离
		
P2758 编辑距离 题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一 ...
 - 洛谷 P2758 编辑距离
		
P2758 编辑距离 题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一 ...
 - P2758 编辑距离
		
题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一个字符: !皆为小写字 ...
 - 洛谷P2758编辑距离(线性DP)
		
题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一个字符: !皆为小写字 ...
 - PAT 1007. 素数对猜想 (20)
		
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数."素数对猜想"认为"存在无穷多对相邻且 ...
 - PAT乙级   1007. 素数对猜想 (20)
		
1007. 素数对猜想 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们定义 dn 为:dn = ...
 - PAT-乙级-1007. 素数对猜想 (20)
		
1007. 素数对猜想 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们定义 dn 为:dn = ...
 - (编辑距离问题 线性DP) nyoj1431-DNA基因鉴定
		
题目描述: 我们经常会听说DNA亲子鉴定是怎么回事呢?人类的DNA由4个基本字母{A,C,G,T}构成,包含了多达30亿个字符.如果两个人的DNA序列相差0.1%,仍然意味着有300万个位置不同,所以 ...
 - [C++]PAT乙级1007.素数对猜想 (20/20)
		
/* 1007. 素数对猜想 (20) 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数.“素数对猜想”认为“存在无穷 ...
 
随机推荐
- C# Post发送 接受Xml
			
//组合xml内容 StringBuilder strBuilder = new StringBuilder(); var par= @"<xml> <appid>w ...
 - EF 使用lambda表达式 更新一对多数据时报错
			
1.需求 更新一对多表中的附表数据,表结构如下: 2.思路 个人觉得一个个去对比关联的附表数据是删除还是添加比较麻烦,就直接清空主表关联的附表,然后重新建立关联关系. 3.弊端 如果附表(前提是附表 ...
 - bootstrapValidator JS修改内容无法验证
			
需求: form表单输入中有坐标,坐标可以输入也可以从地图中获取,验证插件使用的是 bootstrapValidator 问题: 当输入错误的值时会触发验证,有错误提示.当在地图上选择坐标,通过js修 ...
 - Python中url标签使用详解
			
url标签: 1.在模板中,我们经常要使用一些url,实现页面之间的跳转,比如某个a标签中需要定义href属性.当然如果通过硬编码的方式直接将这个url固定在里面也是可以的,但是这样的话,对于以后进行 ...
 - js的alert()
			
效果图: 图一: 图二: 图三: 代码: <script type="text/javascript"> // alert() ; 只允许一个参数,如果有多个参数只显示 ...
 - 三个css属性 设置文字竖直居中
			
display: flex; justify-content:center; align-items:Center;
 - 元素定位工具Weditor的使用
			
(1).安装:pip install --pre --upgrade weditor 安装成功 (2).启动python -m weditor
 - 关于爬虫的日常复习(17)——scrapy系列1
 - 基于 HTML5 WebGL 的虚拟现实可视化培训系统
			
前言 2019 年 VR, AR, XR, 5G, 工业互联网等名词频繁出现在我们的视野中,信息的分享与虚实的结合已经成为大势所趋,5G 是新一代信息通信技术升级的重要方向,工业互联网是制造业转型升级 ...
 - 一次完整的OCR实践记录
			
一.任务介绍 这次的任务是对两百余张图片里面特定的编号进行识别,涉及保密的原因,这里就不能粘贴出具体的图片了,下面粘贴出一张类似需要识别的图片. 假如说我的数据源如上图所示,那么我需要做的工作就是将上 ...