CodeVS 2598 编辑距离问题 题解

首先分析该问题,看数据大小,应当是一道dp题目,本题求得是最小值

状态分析

dp[i][j]表示,字符串Ai个字符到字符串Bj个字符的编辑距离

转移方程:

附上Cpp代码

#include <cstdio>
#include <iostream>
#include <cstring>
#define maxn 4003
#define maxx 0x3f3f3f3f
char a[maxn],b[maxn];
int dp[maxn][maxn];
int al,bl;
int minn(int ma,int mb,int mc){
    return std::min(std::min(ma,mb),mc);
}
int main(){
    std::cin >> a >> b;
    al = strlen(a);
    bl = strlen(b);
    for(int i=0;i<=al;++i){
        for(int j=0;j<=bl;++j){
            dp[i][j] = maxx;
        }
    }
    for(int i=0;i<=al;++i){
        dp[i][0] = i;
    }
    for(int j=0;j<=bl;++j){
        dp[0][j] = j;
    }
    for(int i=1;i<=al;++i){
        for(int j=1;j<=bl;++j){
            if(a[i-1] == b[j-1]){
                dp[i][j] = dp[i-1][j-1];
            }
            else{
                dp[i][j] = minn(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;
            }
        }
    }               
    std::cout << dp[al][bl] ;
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,343评论 0 18
  • 0. 动态规划分析 0.1 动态规划、递归和贪心算法的区别 动态规划就是利用分治思想和解决冗余的办法来处理问题,所...
    dreamsfuture阅读 7,490评论 2 6
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • 主歌 阳暖春冬是你目之光 光之目你是冬春暖阳 郎君盼女郎 郎女盼君郎 乡村家家是福祝安康 康安祝福是家家村乡 扬风...
    不言诗阅读 307评论 0 0
  • 像暴雨一样活着 很长一段时间,我不像是一个正常的少年,我喜欢的不是阳光明媚,不是和煦微风,不是落日长河,而是狂风暴...
    dou啊阅读 340评论 2 0