就按照传统的方法求。
1 #include<iostream> 2 #include<string.h> 3 using namespace std; 4 int m,n,maxlen[102][102]; 5 void lcs(int a[],int b[]){ 6 for(int i=1;i<=m;i++){ 7 for(int j=1;j<=n;j++){ 8 if(a[i-1]==b[j-1]) 9 maxlen[i][j]=maxlen[i-1][j-1]+1; 10 else 11 if(maxlen[i-1][j]>=maxlen[i][j-1]) 12 maxlen[i][j]=maxlen[i-1][j]; 13 else 14 maxlen[i][j]=maxlen[i][j-1]; 15 } 16 } 17 } 18 int main(){ 19 int n1[102],n2[102],tilenum=1; 20 while(cin>>m>>n){ 21 memset(maxlen,0x0,sizeof(maxlen)); 22 if(!m&&!n) 23 break; 24 for(int i=0;i<m;i++) 25 cin>>n1[i]; 26 for(int i=0;i<n;i++) 27 cin>>n2[i]; 28 lcs(n1,n2); 29 30 cout<<"Twin Towers #"<<tilenum++<<endl; 31 cout<<"Number of Tiles : "<<maxlen[m][n]<<endl<<endl; 32 33 } 34 }
uva 10066 - The Twin Towers,布布扣,bubuko.com
原文:http://www.cnblogs.com/royjwy/p/3607348.html