10066 - The Twin Towers

#include<bits/stdc++.h>
#define sz 110
using namespace std;
int lcs[sz][sz];
int s1[sz];
int s2[sz];
int main()
{
    int N1,N2,i,j,a,b,test=0;
    while(scanf("%d%d",&N1,&N2)==2)
    {
        if(N1==0 && N2==0)
        {
            break;
        }

        for(i=1;i<=N1;i++)
        {
            scanf("%d",&s1[i]);
        }

        for(i=1;i<=N2;i++)
        {
            scanf("%d",&s2[i]);
        }

        for(i=1;i<=N1;i++)
        {
            for(j=1;j<=N2;j++)
            {
                if(s1[i]==s2[j])
                {
                    lcs[i][j]=lcs[i-1][j-1]+1;
                }
                else
                {
                    a=lcs[i-1][j];
                    b=lcs[i][j-1];
                    lcs[i][j]=max(a,b);
                }
            }
        }

        printf("Twin Towers #%d\n",++test);

        printf("Number of Tiles : %d\n\n",lcs[N1][N2]);

        memset(lcs,0,sizeof(lcs));

    }
    return 0;
}

0 comments: (+add yours?)