uva 10066 - The Twin Towers

就按照传统的方法求。

 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 }

 

 

posted on 2014-03-18 12:24  云在心  阅读(144)  评论(0)    收藏  举报

导航