zoukankan      html  css  js  c++  java
  • POJ

    Common Subsequence

    题目大意:

    多组数据,每组两个串,求最长公共子序列。

    解题思路:

    dp[i][j]代表,第一个串的前i个字符和第二个串的前j个字符的最长公共子序列,那么a[i]==b[j]dp[i][j]=max(dp[i][j],dp[i1][j1]+1);
    a[i]!=b[j]dp[i][j]=max(dp[i][j],max(dp[i1][j],dp[i][j1]));

    AC代码:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int maxn = 1000;
    int dp[maxn + 5][maxn + 5];
    char a[maxn + 5], b[maxn + 5];
    int main() {
        while(scanf("%s%s", a + 1, b + 1) != EOF) {
            memset(dp, 0, sizeof(dp));
            int len1 = strlen(a + 1);
            int len2 = strlen(b + 1);
            for(int i = 1; i <= len1; i++)
                for(int j = 1; j <= len2; j++) {
                    if(a[i] == b[j])dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1);
                    else dp[i][j] = max(dp[i][j], max(dp[i - 1][j], dp[i][j - 1]));
                }
            printf("%d
    ", dp[len1][len2]);
        }
        return 0;
    }
  • 相关阅读:
    自定义view分析-Pull-to-Refresh.Rentals-Android
    laucher-icon的加载过程
    android shape 布局文件
    android canvas
    解释器模式(Interpreter)
    中介者模式(Mediator)
    Code obfuscation
    Table Tennis Game 2
    最小公倍数的对数
    C语言基础
  • 原文地址:https://www.cnblogs.com/TRDD/p/9813528.html
Copyright © 2011-2022 走看看