描述:比较最长子序列,然后输出这个最长子序列 #include <cstdio> #include <cstring> int n,m,flag,arr[110][110],num[110][110]; char str[110][35],v[110][35]; void show(int x,int y) { if(x==n||y==m) return; if(num[x][y]==1) { if(flag) printf(" "); else flag=1; printf("%s",v[y]); show(x+1,y+1); } else if(!num[x][y]) show(x+1,y); else show(x,y+1); } int main() { // freopen("a.txt","r",stdin); while(scanf("%s",str[0])!=EOF) { for(n=1;; n++ ) { scanf("%s",str[n]); if(str[n][0]=='#') break; } for(m=0;; m++) { scanf("%s",v[m]); if(v[m][0]=='#') break; } memset(arr,0,sizeof(arr)); memset(num,-1,sizeof(num)); for(int i=n-1; i>=0; i--) for(int j=m-1; j>=0; j--) if(strcmp(str[i],v[j])==0) { arr[i][j]=arr[i+1][j+1]+1; num[i][j]=1; } else if(arr[i+1][j]>arr[i][j+1]) { arr[i][j]=arr[i+1][j]; num[i][j]=0; } else arr[i][j]=arr[i][j+1]; flag=0; show(0,0); printf("\n"); } return 0; }