题目链接
若打印所有最长子序列 参考博客
#include<bits/stdc++.h> using namespace std; char a[1003],b[1003]; int dp[1003][1003]; int main() { while(~scanf("%s",a)) { scanf("%s",b); memset(dp,0,sizeof(dp)); int la=strlen(a),lb=strlen(b); for(int i=1;i<=la;i++) { for(int j=1;j<=lb;j++) { if(a[i-1]==b[j-1]) { dp[i][j]=dp[i-1][j-1]+1; } else dp[i][j]=max(dp[i][j-1],dp[i-1][j]); } } //求最大长度 // printf("%d!!\n",dp[la][lb]); int ii=la-1,jj=lb-1; vector<char> ans; ans.clear(); while(ii>=0&&jj>=0) { if(a[ii]==b[jj]) { ans.push_back(a[ii]); ii--;jj--; } else if(dp[ii][jj+1]<dp[ii+1][jj]) { jj--; } else ii--; } //打印最长公共子序列 reverse(ans.begin(),ans.end()); for(int i=0;i<dp[la][lb];i++) printf("%c",ans[i]); if(dp[la][lb])printf("\n"); } }
最长公共子序列 模板
最新推荐文章于 2022-09-28 11:46:32 发布