Uva 111 - History Grading


 #include<iostream>
#include<cstdio>
#include<cstring>

#define up 1
#define left 2
#define diag 3
#define mx 109
#define pf printf
#define sf scanf

using namespace std;

int N,x[mx],y[mx],c[mx][mx];

void original()
{
    for(int i=0;i<N;i++)
    {
        int p;
        sf("%d",&p);

        x[p-1]=i;
    }
}

void build_LCS(int m, int n)
{
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(x[i-1] == y[j-1])
            {
                c[i][j] = c[i-1][j-1]+1;
            }

            else
            {
                c[i][j] = max(c[i-1][j] , c[i][j-1]);
            }
        }
    }

    pf("%d\n",c[m][n]);
}

int main()
{
    sf("%d",&N);

    original();

    while(true)
    {
        for(int i=0;i<N;i++)
        {
            int p;

            if(sf("%d",&p) != 1) return 0;

            y[p-1]=i;
        }

        build_LCS(N,N);
        memset(y,0,sizeof(y));
    }

    return 0;
}

Comments

Popular posts from this blog

Uva 10650 - Determinate Prime

SPOJ-CMG - Collecting Mango

LeetCode Palindrome Number