Description
Input
Output
Sample Input
die einkommen der landwirte sind fuer die abgeordneten ein buch mit sieben siegeln um dem abzuhelfen muessen dringend alle subventionsgesetze verbessert werden # die steuern auf vermoegen und einkommen sollten nach meinung der abgeordneten nachdruecklich erhoben werden dazu muessen die kontrollbefugnisse der finanzbehoerden dringend verbessert werden #
Sample Output
die einkommen der abgeordneten muessen dringend verbessert werden
单词的LCS,要递归输出=-=,我脑袋大笨,竟在比赛时想着模拟
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> using namespace std; char s1[110][110],s2[110][110]; char s[110][110]; int mark[110][110],dp[110][110]; int len1,len2,num; void LCS() { memset(dp,0,sizeof(dp)); memset(mark,0,sizeof(mark)); for(int i=0;i<=len1;i++) mark[i][0]=1; for(int i=0;i<=len2;i++) mark[0][i]=-1; for(int i=1;i<=len1;i++) { for(int j=1;j<=len2;j++) { if(!strcmp(s1[i-1],s2[j-1])) { dp[i][j]=dp[i-1][j-1]+1; mark[i][j]=0;//mark为0代表s1[i-1]=s2[j-1]便于递归输出 } else if(dp[i-1][j]>=dp[i][j-1]) { dp[i][j]=dp[i-1][j]; mark[i][j]=1;//同理 } else { dp[i][j]=dp[i][j-1]; mark[i][j]=-1; } } } } void print(int i,int j) { if(!i&&!j) return ; if(mark[i][j]==0) { print(i-1,j-1); strcpy(s[num++],s1[i-1]); } else if(mark[i][j]==1) print(i-1,j); else print(i,j-1); } int main() { while(~scanf("%s",s1[0])) { len1=1; while(strcmp(s1[len1-1],"#")) scanf("%s",s1[len1++]); scanf("%s",s2[0]); len2=1; while(strcmp(s2[len2-1],"#")) scanf("%s",s2[len2++]); len1--; len2--; num=0; LCS(); print(len1,len2); printf("%s",s[0]); for(int i=1;i<num;i++) printf(" %s",s[i]); printf("\n"); } return 0; }
周赛 POJ 2250 Compromise,布布扣,bubuko.com
原文:http://blog.csdn.net/u013582254/article/details/38395443