10066 - The Twin Towers (UVA)

It's a normal LCS type classical problem:

Source code:

#include<bits/stdc++.h>
using namespace std;
int N1,N2,dp[103][103];
int tower1[103],tower2[103];
int len_LCS(int i,int j)
{
    if(i==N1 or j==N2)  return 0;
    if(dp[i][j]!=-1)     return dp[i][j];
    int ans=0;
    if(tower1[i]==tower2[j])
    {
        ans=1+len_LCS(i+1,j+1);
    }
    else
    {
        int val1=len_LCS(i+1,j);
        int val2=len_LCS(i,j+1);
        ans=max(val1,val2);
    }
    return dp[i][j]=ans;
}
int main()
{
    int tt=1;
    while(scanf("%d %d",&N1,&N2)==2)
    {
        if( (N1|N2)==0) break;
        memset(dp,-1,sizeof(dp));
        for(int i=0;i<N1;i++)
        {
            scanf("%d",&tower1[i]);
        }
        for(int i=0;i<N2;i++)
        {
            scanf("%d",&tower2[i]);
        }
        printf("Twin Towers #%d\nNumber of Tiles : %d\n\n",tt,len_LCS(0,0));
        tt++;
    }
    return 0;
}








Comments

Popular posts from this blog

PopIt Serially support page

10405 - Longest Common Subsequence (UVA)