zoukankan      html  css  js  c++  java
  • LCS POJ 1458 Common Subsequence

    题目传送门

    题意:输出两字符串的最长公共子序列长度

    分析:LCS(Longest Common Subsequence)裸题。状态转移方程:dp[i+1][j+1] = dp[i][j] + 1; (s[i] == t[i])dp[i+1][j+1] = max (dp[i][j+1], dp[i+1][j]); (s[i] != t[i])

    代码:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    const int MAXN = 3e2 + 10;
    const int INF = 0x3f3f3f3f;
    
    char s[MAXN];
    char t[MAXN];
    int dp[MAXN][MAXN];
    
    void LCS(int len1, int len2)
    {
        for (int i=0; i<len1; ++i)
        {
            for (int j=0; j<len2; ++j)
            {
                if (s[i] == t[j])
                {
                    dp[i+1][j+1] = dp[i][j] + 1;
                }
                else
                {
                    dp[i+1][j+1] = max (dp[i][j+1], dp[i+1][j]);
                }
            }
        }
    }
    
    int main(void)      //POJ 1458 Common Subsequence
    {
        #ifndef ONLINE_JUDGE
        freopen ("LCS.in", "r", stdin);
        #endif
    
        while (~scanf ("%s%s", &s, &t))
        {
            memset (dp, 0, sizeof (dp));
            int len1 = strlen (s);
            int len2 = strlen (t);
    
            LCS (len1, len2);
            printf ("%d
    ", dp[len1][len2]);
        }
    
        return 0;
    }
    

      

    编译人生,运行世界!
  • 相关阅读:
    bzoj 3924
    bzoj 1095
    luogu 4886
    bzoj 2152
    CF960G
    bzoj 3561
    bzoj 4176
    bzoj 4407
    bzoj 3309
    luogu 4608
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4360784.html
Copyright © 2011-2022 走看看