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 是偶数.“素数对猜想”认为“存在无穷 ...
随机推荐
- 【转】在MyEclipse 8.6上搭建Android开发环境
内容导航 第 1 页:基本环境准备 第 2 页:下载Android SDK 第 3 页:配置SDK环境变量 第 4 页:给MyEclipse安装ADT插件 第 5 页:配置MyEclipse 第 6 ...
- vue学习--组件之间的传值方式
1.概述 vue由多个组件构成页面,在不同的组件中有不同的联系,组件之间的传值是十分有必要的 2.父子组件之间传值 --props和$emit 父传子:通过props 方法:子组件:props:['m ...
- Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解
微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的.但是今年这种日子就可能一去不复返了,没法办法啊.前 ...
- 修理牛棚 贪心 USACO
今天开始终于可以刷USACO的题啦 准备每一道都发一个题解 1010: 1.3.2 Barn Repair 修理牛棚 时间限制: 1 Sec 内存限制: 128 MB提交: 9 解决: 7[提交] ...
- python 学习爬虫教程~
思路:: (本文没有用xpath定位,xpath需要导入第三方库 from lxml import etree) 1.首先通过urllib类获取到网页的所有内容 2.通过partition获取其中 ...
- Splash简单应用
jd->iphone import requests from lxml import etree # search_key = 'iphone' jd_url = "https:// ...
- 51Nod 1238 最小公倍数之和V3
题目传送门 分析: 现在我们需要求: \(~~~~\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(i,j)\) \(=\sum_{i=1}^{n}\sum_{j=1}^{n}\frac ...
- 《HelloGitHub》第 46 期
兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...
- echats 的使用
第一步在我们的电脑上百度搜索echarts,点击进去,如下图所示: 2 第二步进去之后,点击下载,选择要下载的echarts版本,一般选择源代码,如下图所示: 3 第三步下载完成之后,我们也可以来使用 ...
- mysql--->B+tree索引的设计原理
1.什么是数据库的索引 每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不 ...