zoukankan      html  css  js  c++  java
  • P2758 编辑距离

    题目描述

    设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:

    1、删除一个字符;

    2、插入一个字符;

    3、将一个字符改为另一个字符;

    !皆为小写字母!

    输入输出格式

    输入格式:

    第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。

    输出格式:

    只有一个正整数,为最少字符操作次数。

    输入输出样例

    输入样例#1: 复制
    sfdqxbw
    gfdgw
    
    输出样例#1: 复制
    4

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define inf 2147483647
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    #define ri register int
    template <class T> inline T min(T a, T b, T c)
    {
        return min(min(a, b), c);
    }
    template <class T> inline T max(T a, T b, T c)
    {
        return max(max(a, b), c);
    }
    template <class T> inline T min(T a, T b, T c, T d)
    {
        return min(min(a, b), min(c, d));
    }
    template <class T> inline T max(T a, T b, T c, T d)
    {
        return max(max(a, b), max(c, d));
    }
    #define scanf1(x) scanf("%d", &x)
    #define scanf2(x, y) scanf("%d%d", &x, &y)
    #define scanf3(x, y, z) scanf("%d%d%d", &x, &y, &z)
    #define scanf4(x, y, z, X) scanf("%d%d%d%d", &x, &y, &z, &X)
    #define pi acos(-1)
    #define me(x, y) memset(x, y, sizeof(x));
    #define For(i, a, b) for (int i = a; i <= b; i++)
    #define FFor(i, a, b) for (int i = a; i >= b; i--)
    #define bug printf("***********
    ");
    #define mp make_pair
    #define pb push_back
    const int maxn = 10005;
    // name*******************************
    string s1,s2;
    int l1,l2;
    int ans=inf;
    int f[2005][2005];
    
    // function******************************
    
    
    
    //***************************************
    int main()
    {
    //    ios::sync_with_stdio(0);
    //    cin.tie(0);
    //    freopen("test.txt", "r", stdin);
        //  freopen("outout.txt","w",stdout);
        cin>>s1>>s2;
        l1=s1.size(),l2=s2.size();
        me(f,127);
        For(i,0,max(l1,l2))
        f[0][i]=i,f[i][0]=i;
        For(i,1,l1)
        {
            For(j,1,l2)
            {
                if(s1[i-1]==s2[j-1])f[i][j]=f[i-1][j-1];
                else f[i][j]=min(f[i-1][j],f[i][j-1],f[i-1][j-1])+1;
    //            cout<<i<<","<<j<<":"<<f[i][j]<<endl;
            }
        }
    cout<<f[l1][l2];
    
        return 0;
    }
  • 相关阅读:
    uva 10127
    POJ 3280 Cheapest Palindrome
    看图学英语
    看图学英语
    算法 Tricks(四)—— 获取一个数二进制形式第一个不为 0 的位置
    算法 Tricks(四)—— 获取一个数二进制形式第一个不为 0 的位置
    Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
    强大的 function adapters
    强大的 function adapters
    transform、accumulate —— C++ 下的 MapReduce
  • 原文地址:https://www.cnblogs.com/planche/p/8627410.html
Copyright © 2011-2022 走看看