zoukankan      html  css  js  c++  java
  • UVA10405

    UVA - 10405

    Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu

    []   [Go Back]   [Status]  

    Description

    Download as PDF
     

    Problem C: Longest Common Subsequence

    Sequence 1:                

    Sequence 2:                
    Given two sequences of characters, print the length of the longest common subsequence of both sequences. For example, the longest common subsequence of the following two sequences:

    abcdgh
    aedfhr
    
    is adh of length 3.

    Input consists of pairs of lines. The first line of a pair contains the first string and the second line contains the second string. Each string is on a separate line and consists of at most 1,000 characters

    For each subsequent pair of input lines, output a line containing one integer number which satisfies the criteria stated above.

    Sample input

    a1b2c3d4e
    zz1yy2xx3ww4vv
    abcdgh
    aedfhr
    abcdefghijklmnopqrstuvwxyz
    a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0
    abcdefghijklmnzyxwvutsrqpo
    opqrstuvwxyzabcdefghijklmn
    

    Output for the sample input

    4
    3
    26
    14
    



    #include <cstdlib>
    #include <cstring>
    #include <string>
    #include <iostream>
    using namespace std;
    #define N 10005
    string str1,str2;
    int dp[N+1][N+1] ;
    int maxx(int a , int b)
    {     
        if(a > b) return a ;  
        return b ;
    }
    int LCSL(int len1 , int len2)
    {     
        int i , j ;   
        int len = maxx(len1 , len2);    
        for( i = 0 ; i <= len; i++ )    
            dp[i][0] = 0,dp[0][i] = 0;   
        for( i = 1 ; i<= len1 ; i++)      
            for( j = 1 ; j <= len2 ; j++)      
                if(str1[i - 1] == str2[j - 1])           
                    dp[i][j] = dp[i - 1][ j - 1] + 1 ;      
                else                 
                    dp[i][j] = maxx(dp[i - 1][ j ] , dp[i][j - 1]) ;    
                return dp[len1][len2]; }
    int main()
    {     
        while(getline(cin,str1))
        {          
            getline(cin,str2);      
            int len1=str1.size();      
            int len2 =str2.size();   
            cout<<LCSL(len1 , len2)<<endl;  
        }     
        return 0;
    }


  • 相关阅读:
    「ROI 2019 Day1」运输 20/19
    「ROI 2018 Day 2」无进位加法
    「ROI 2018 Day 1」量子隐形传态
    「ROI 2018 Day 2」快速排序
    「ROI 2018 Day 1」Innophone (分块+斜率优化)
    「ROI 2017 Day 1」虎 (计算几何)
    [BJ United Round #3] 押韵 [学习笔记]
    「CEOI2020」象棋世界
    CF1375G
    CF1392(div1+div2)
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/2866864.html
Copyright © 2011-2022 走看看