首页 > 其他分享 >题解:P2758 编辑距离

题解:P2758 编辑距离

时间:2024-04-03 10:33:42浏览次数:20  
标签:le 题解 ll long P2758 编辑 dp size

第一步:确定子问题

有4种操作(删除,添加,修改,不变)。所以4个子问题就是操作的A变为B需要多少步。

第二步:确定状态

设 $dp[i][j]$ 为将A的前i位变为B的前j位的最小代价。

第三步:确定转移方程

  1. 删除: $dp[i][j]=dp[i-1][j]+1$
  2. 添加: $dp[i][j]=dp[i][j-1]+1$
  3. 修改: $dp[i][j]=dp[i-1][j-1]+1$
  4. 不变: $dp[i][j]=dp[i-1][j-1]$

第四步:寻找边界条件

$dp[0][i]=i(0\le i\le |B|)$

$dp[i][0]=i(0\le i\le |A|)$

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
string a,b;
ll dp[2005][2005];
signed main(){
	ios::sync_with_stdio(false);
	cin>>a>>b;a='.'+a;b='.'+b;
	ll n=a.size()-1,m=b.size()-1;
	memset(dp,0x3f,sizeof(dp));
	for(ll i=0;i<=m;i++)dp[0][i]=i;
	for(ll i=0;i<=n;i++)dp[i][0]=i;
	for(ll i=1;i<=n;i++)
		for(ll j=1;j<=m;j++){
			if(a[i]==b[j]){
				dp[i][j]=dp[i-1][j-1];
				continue;
			}
			dp[i][j]=min(dp[i][j],dp[i-1][j]+1);
			dp[i][j]=min(dp[i][j],dp[i][j-1]+1);
			dp[i][j]=min(dp[i][j],dp[i-1][j-1]+1);
		}
	cout<<dp[n][m];
	return 0;
}

标签:le,题解,ll,long,P2758,编辑,dp,size
From: https://www.cnblogs.com/OMG-NOI/p/18112122

相关文章

  • MP3文件ID3信息编辑器代码开源 - 开源研究系列文章 - 个人小作品
    上次把磁性窗体的源码开源了,这次就开源另一个程序源码:MP3文件ID3信息编辑器。这个源码也比较简单,关键在于获取和写入MP3文件的这个ID3的信息即可。 1、 项目目录; 2、 源码介绍;这个操作信息编辑的就封装在MP3ID3.bas文件中。          ......
  • 我对于编辑器的看法
    引言我一直非常喜欢sublime这款编辑器,以至于我每次遇到问题时都会去找一个令我满意的答案,而不是转身去用vscode。本篇博客的起因就是:历经sublime的久多折磨后,我对一款编辑器有多难做的感悟,对VsCode的喜爱以及对没有编辑器能超过VsCode的惋惜。Sublime差在哪里我前面说......
  • AGC066 题解
    题解:AT_agc066_a[AGC066A]AdjacentDifference笑点解析:没有必要将总成本最小化。我们将格子间隔的黑白染色(显然有两种染色方法),对于黑点我们要求它是奇数倍\(d\),对于白点我们要求它是偶数倍\(d\),这样一定满足相邻格子相差至少\(d\)。因为两种染色方法的代价和为\(dN^2\),......
  • [ABC259F] Select Edges 题解
    很容易想到树形dp。考虑在有根树内,每个点都有两种状态:不选自己和父亲的边;要选自己和父亲的边。那么单独对于子树内部而言,就要分两种情况:最多可以向\(d_i\)个孩子连边,对应上述第一种情况,我们称之为\(f_i\);最多可以向\(d_i-1\)个孩子连边,对应上述第二种情况,我们称之......
  • ABC347G 题题解
    还算是比较经典了。首先我们注意到一个性质:\(1+3+\cdots+n=n^2\)。所以我们可以把平方拆开。然后容易证明\(a_{i,j}\)填\(1\)一定比填\(0\)不劣。我们可以把\(a_{i,j}\)拆成\(4\)个点,然后我们想到了最小割。构造网络:\(a_{i,j,x}\leftarrowa_{i,......
  • 三道dp的题解报告
    三道dp的题解报告圆题目来源牛客练习赛122D题练习赛链接https://ac.nowcoder.com/acm/contest/75768题面原题面为中文就直接放原题面截图了。解法事实上,把\(n\)与\(1\)断掉,断环为链,把原来的线段看成区间,线段相交就是区间之间部分覆盖(区间有重复部分但是没有相互包含关......
  • 题解:AT_abc176_e [ABC176E] Bomber
    分析我们可以用\(hf\)和\(wf\)分别储存每行的目标数及每列的目标数。然后我们可以贪心:若想摧毁最多的目标,则选定的位置所在的行是所有行中目标最多的,所在的列是所有列中目标最多的(感性理解一下)。但是,选定的位置也可能有一个目标。在统计摧毁的目标数时,该目标被算了两次......
  • vi编辑器
    vi编辑器vi和vim的关系vim是vi的升级版本vim的三种模式命令模式:默认模式,可以实现移动光标,剪切/粘贴文本输入模式:用于修改文本末行模式:保存,退出等搜索替代三种模式的切换方法:命令模式命令模式:此模式下,可使用方向键(上、下、左、右键)或k、j、h、i移动光标的位置,还可以对......
  • vi编辑器
    文章目录一、vi编辑器二、三种常见模式三、命令模式四、输入模式一、vi编辑器Linux系统中“一切皆文件”,因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器。linux中常见的文本还有nanogedit使用Vi文本编辑器的原因有很多:几乎所有的Linux发......
  • P2143 [JSOI2010] 巨额奖金 题解
    P2143[JSOI2010]巨额奖金题解矩阵树定理+Kruskal最小生成树计数。思路MST都是喵喵题。引理1:所有合法的权值相同边的连边方案,得到的连通块情况是相同的。感性理解:如果不相同意味着至少有一条边可以连通一对连通块。所以我们可以这么做:先跑Kruskal标记树边,然后枚举......