POJ 2250 Compromise(最长公共子序列)
2015-05-22 22:48
429 查看
题意:求两段文本的最长公共文本;
思路:最长公共子序列+打印公共序列;
思路:最长公共子序列+打印公共序列;
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[505][505],num1,num2; char s[505][505],s1[505][505],s2[505][505]; void lcs(int a,int b) { if(a==0||b==0) return; if(s[a][b]==0) { lcs(a-1,b-1);printf("%s ",s1[a]); } else if(s[a][b]==-1) { lcs(a-1,b); } else { lcs(a,b-1); } } int main() { int i,j,k; while(scanf("%s",s1[1])!=EOF) { num1=2,num2=1; memset(s,0,sizeof(s)); memset(dp,0,sizeof(dp)); while(scanf("%s",s1[num1])&&s1[num1][0]!='#') num1++; while(scanf("%s",s2[num2])&&s2[num2][0]!='#') num2++; for(i=1;i<num1;i++) { for(j=1;j<num2;j++) { if(!strcmp(s1[i],s2[j])) { dp[i][j]=dp[i-1][j-1]+1;s[i][j]=0; } else { if(dp[i][j-1]>dp[i-1][j]) { dp[i][j]=dp[i][j-1];s[i][j]=1; } else { dp[i][j]=dp[i-1][j];s[i][j]=-1; } } } } lcs(num1-1,num2-1); printf("\n"); } return 0; }
相关文章推荐
- POJ 2250 Compromise(最长公共子序列LCS)
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- POJ 2250 Compromise(最长公共子序列)
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- POJ 2250 Compromise(最长公共子序列 列出子序列)
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- poj 2250 Compromise(最长公共子序列)
- poj 2250 Compromise 【最长公共子序列变形】
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- POJ 2250 Compromise (DP,最长公共子序列)
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- POJ 2250 Compromise(最长公共子序列)
- POJ 2250 Compromise (DP,最长公共子序列)
- POJ 2250 & UVA 531 Compromise(字符串、 最长公共子序列)
- poj 2250 Compromise(LCS,最长公共子序列)
- poj_2250 Compromise(输出最长公共子序列)
- 【POJ 2250】Compromise(最长公共子序列LCS)