zoukankan      html  css  js  c++  java
  • 动态规划-最长公共子序列(输出子序列)

    题目:51node 1006

    题意:找出公共子序列并输出,若有多个,输出一个就行

    方法:先用一个二维数组dp[i][j]记录字符串 s1,s2长度分别为i和j时的最长公共子序列,在根据二维数组的值回溯;

    代码:

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <cstring>
    using namespace std;
    int dp[1010][1010];
    char s[1010][1010];
    string ss = "";
    int main()
    {
        string s1,s2;
        cin >> s1 >> s2;
        int len1 = s1.length();
        int len2 = s2.length();
        memset(dp,0,sizeof(dp));
        
         for(int i = 1;i <= len1;++i){
                for(int j = 1;j <= len2;++j){
                    if( s1[i-1]==s2[j-1] ) dp[i][j] = dp[i-1][j-1]+1;
                    else {
                        dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
                    //    dp[i][j] = max(dp[i][j],dp[i-1][j-1]);
                    }
                }
            }
        
        while( dp[len1][len2]>0 ) {
            if( dp[len1][len2]==dp[len1-1][len2] ){
                len1--;
            }
            else if( dp[len1][len2]==dp[len1][len2-1] ){
                len2--;
            }
            else{
                ss.insert(0,string(1,s1[len1-1]));         //string(num,str)代表生成一个字符串,包含num个str字符;每次插入的位置是第一个,因为是从后往前存
                len1--;
                len2--;        
            }
        }
    //    cout << dp[len1][len2] << endl;
        cout << ss << endl;
        return 0;
    }
  • 相关阅读:
    第六天
    《分布式架构中数据一致性常见的几个问题》阅读心得
    第五天
    软件开发记录第四天
    资料整理
    Mongodb_分片集群模式
    MongoDB_spring整合mongodb
    安装环境
    MongoDB_副本集集群模式
    MongoDB_java连接MongoDB
  • 原文地址:https://www.cnblogs.com/chenxi0x0/p/9724436.html
Copyright © 2011-2022 走看看