最长公共子序列(dp)

Posted #忘乎所以#

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长公共子序列(dp)相关的知识,希望对你有一定的参考价值。

求最长公共子序列,比较出两个字符串的最长的序列。
用动态规划求解







1
#include <bits/stdc++.h> 2 #define N 10005 3 #define mem(a) memset(a,0,sizeof(a)) 4 5 using namespace std; 6 int k[N][N]; 7 stack<char> s; 8 void substring(string s1,string s2){ 9 mem(k); 10 int slen,clen; 11 slen=s1.length(); 12 clen=s2.length(); 13 for(int i=1;i<=slen;i++){ 14 for(int j=1;j<=clen;j++){ 15 if(s1[i-1]==s2[j-1]){ 16 k[i][j]=k[i-1][j-1]+1; 17 }else{ 18 k[i][j]=max(k[i][j-1],k[i-1][j]); 19 } 20 } 21 } 22 for(int i=slen,j=clen;i>=1&&j>=1;){ 23 if(s1[i-1]==s2[j-1]){ 24 s.push(s1[i-1]); 25 i--,j--; 26 }else{ 27 if(k[i][j-1]>=k[i-1][j]){ 28 j--; 29 }else{ 30 i--; 31 } 32 } 33 } 34 } 35 36 int main(){ 37 string s1,s2; 38 cin>>s1>>s2; 39 substring(s1,s2); 40 while(!s.empty()){ 41 cout<<s.top(); 42 s.pop(); 43 } 44 cout<<endl; 45 return 0; 46 }

 

以上是关于最长公共子序列(dp)的主要内容,如果未能解决你的问题,请参考以下文章

dp-最长公共子序列

最长公共子序列

算法分析设计实践——最长公共子序列

经典dp 最长公共子序列

DP简单问题联系--最长递增子序列+最长公共子序列等

NYOJ 36 最长公共子序列 (还是dp)