zoukankan      html  css  js  c++  java
  • HDU 1503

    传送门

    题目大意:

    举个例子: apple 和 peach,合成一个词最短是appleach。像这样求两个单词合成后的最短长度。

    题目分析:

    首先肯定想到是LCS只输出一遍,难点就是怎么输出:其实只要向求LCS时的顺序再走一遍。

    code

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    using namespace std;
    
    const int N = 1005;
    char s[N], t[N];
    int f[N][N], n, m, flag[N][N];
    
    inline void getSame(int i, int j){
        if(!i && !j) return;
        if(!flag[i][j]){
            getSame(i - 1, j - 1);
            printf("%c", s[i]);
        }
        else if(flag[i][j] == 1)
            getSame(i - 1, j), printf("%c",s[i]);
        else getSame(i, j - 1), printf("%c", t[j]);
    }
    
    int main(){
        while(~scanf("%s%s", s + 1, t + 1)){
            // scanf("%s", s + 1);
            n = strlen(s + 1);
            m = strlen(t + 1);
            memset(f, 0, sizeof f);
            for(int i = 1; i <= n; i++) flag[i][0] = 1;
            for(int i = 1; i <= m; i++) flag[0][i] = -1;
            for(int i = 1; i <= n; i++)
                for(int j = 1; j <= m; j++){
                    if(s[i] == t[j]) f[i][j] = f[i - 1][j - 1] + 1, flag[i][j] = 0;
                    else if(f[i - 1][j] >= f[i][j - 1]) f[i][j] = f[i - 1][j], flag[i][j] = 1;
                    else f[i][j] = f[i][j - 1], flag[i][j] = -1;
                }
            getSame(n, m);
            printf("
    ");
        }
    }
    
    
  • 相关阅读:
    10.7
    10.5
    周六
    周五
    周四
    周三
    四则运算
    zabbix——yum安装
    Stirling's Formula
    CONTRASTIVE REPRESENTATION DISTILLATION
  • 原文地址:https://www.cnblogs.com/CzYoL/p/7658965.html
Copyright © 2011-2022 走看看