“将A串变为B串”类动态规划题(已修改解释)

本文讲述了作者在一次考试中遇到的编程题,该题目与编辑距离问题类似,但存在一个子串优化的额外条件。作者通过分析指出,由于可以预先处理A串,寻找最优子串以减少操作次数,这导致输出结果时需要取最小值。通过理解这个关键点,解决了题目中的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天考试感觉要被虐爆了

就我的感觉来说,后两题绝对是省队水平 Orz Owen第四题考场50‘

不过成绩也不是很差

得益于AC了第一题吧

先给出一道很久以前刷的题目

字符串是数据结构和计算机语言里很重要的数据类型,在计算机语言中,对于字符串我们有很多的操作定义,因此我们可以对字符串进行很多复杂的运算和操作。实际上,所有复杂的字符串操作都是由字符串的基本操作组成。例如,把子串 a 替换为子串 b,就是用查找、删除和插入这三个基本操作实现的。因此,在复杂字符串操作的编程中,为了提高程序中字符操作的速度,我们就应该用最少的基本操作完成复杂操作。 
在这里,假设字符串的基本操作仅为:删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。 
我们把进行了一次上述三种操作的任意一种操作称为进行了一步字符基本操作。 
下面我们定义两个字符串的编辑距离:对于两个字符串 a 和 b,通过上述的基本操作,我们可以把 a 变成 b 或 b 变成 a;那么,把字符串 a 变成字符串 b 需要的最少基本字符操作步数称为字符串 a 和字符串 b 的编辑距离。 
例如,如 a=“ABC”,b=“CBCD”,则 a 与 b 的编辑距离为 2。 
你的任务就是:编一个最快的程序来计算任意两个字符串的编辑距离。 
 
输入数据: 
第 1 行为字符串 a;第 2 行为字符串 b。注:字符串的长度不大于 1000,字符串中的字符全为大写字母。 
 
输出数据: 
编辑距离。 
 
样例 
输入文件名:edit.in 
ABC  
CBCD 
 
输出文件名:edit.out 
2 


f[i][j]表示第一个串0-i、第二个串0-j之间的编辑距离,按照删除、插入、替换转移即可

code如下

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <io
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值