【算法题】最长公共子序列

来源:互联网 发布:淘宝店铺严重违规12分 编辑:程序博客网 时间:2024/05/23 01:16

dp[i][j]=maxdp[i1][j]dp[i][j1]dp[i1][j1]+1if: str[i]==str[j] 


#include <iostream>#include <string>#include <algorithm>#include <vector>#include <utility>#include <numeric>#include <queue>using namespace std;//#define debug_int func(string str1, string str2){    vector<int> tmp(str2.size()+1);    vector<vector<int>> dp(str1.size()+1,tmp);    for (auto i = 1; i <= str1.size();++i)    {        for (auto j = 1; j <= str2.size();++j)        {            dp[i][j] = max(dp[i][j],dp[i][j-1]);            dp[i][j] = max(dp[i][j], dp[i-1][j]);            if (str1[i-1]==str2[j-1])            {                dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1);            }            else            {                dp[i][j] = max(dp[i][j], dp[i - 1][j - 1]);            }        }    }    return dp[str1.size()][str2.size()];}int main(){    string str1;    string str2;#ifdef debug_    str1 = "AAACCGTGAGTA";    str2 = "CACCCCTAAGGTACCTT";#else    cin >> str1;    cin >> str2;#endif    cout << func(str1, str2) << endl;    return 0;}

原创粉丝点击