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;
    }
  • 相关阅读:
    十五、函数助手
    REST介绍以及常用的返回状态码
    十四、配置元件之计数器
    十三、参数化
    十二、jmeter目录结构
    十一、HTTP请求之Content-Type
    十、元件的作用域与执行顺序
    九、配置命令行模式
    04-传输层(3)
    03-传输层(2)
  • 原文地址:https://www.cnblogs.com/chenxi0x0/p/9724436.html
Copyright © 2011-2022 走看看