zoukankan      html  css  js  c++  java
  • [洛谷P1279][题解]字串距离

    题目戳我

    很明显的这题是一道dp,主要讲一下几个细节

    1.初始化

    我们需要初始化边界情况也就是一个字符串为空的情况

    #----------#      #----------#
    A:aaaaaa         A:□□□□□□
    B:□□□□□□     or  B:bbbbbb
    #----------#      #----------#

    这时f[i][0]=i*k,f[0][j]=j*k。

    另外注意都为空也就是f[0][0]=0

    2.dp

    这道题的转移有三种

    (1)字符对字符
    A:xxx...a
    B:xxx...b
    由f[i-1][j-1]转移得来
    (2)字符对空格
    A:xxx...a
    B:xxx...□
    或
    A:xxx...□
    B:xxx...b
    由f[i-1][j]或f[i][j-1]转移得来

    具体看代码

    #include<bits/stdc++.h>
    using namespace std;
    string a,b;
    
    inline int d(char a,char b){
        return a>b?(int)a-b:(int)b-a;
    }
    //f[i][j]表示A_i与B_j的距离 
    int f[2333][2333],k;
    //1.初始化 
    inline void Ini(){
        for(int i=1;i<=a.length();i++)f[i][0]=i*k;
        for(int i=1;i<=b.length();i++)f[0][i]=i*k;
        f[0][0]=0;
    }
    
    int main()
    {
        cin>>a>>b>>k;
        Ini();
        //2.dp部分 
        for(int i=1;i<=a.length();i++){
            for(int j=1;j<=b.length();j++){
                f[i][j]=min(min(f[i-1][j],f[i][j-1])+k,f[i-1][j-1]+d(a[i-1],b[j-1]));
            }
        }
        
        cout<<f[a.length()][b.length()]<<endl;
        return 0;
    }

    完结撒花

  • 相关阅读:
    网络对抗技术-实验四
    网络对抗技术-实验三
    安卓终端-Termux
    linux杂记
    使用pl/sql导入导出oracle
    systemctl 实现开机自启服务
    Java8 Collectors.toMap的坑
    idea使用lombok插件
    解决Lost connection to MySQL server during query错误方法
    java8之lamda
  • 原文地址:https://www.cnblogs.com/juruoajh/p/11821698.html
Copyright © 2011-2022 走看看