1.

/**
* FWP, Ausgewählte Probleme aus dem ACM Programming Contest, WS09
* Problem: 111 History Grading
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=47
*
* @author Stefan Gohlke
* @version 1.0, 11/30/2009
*
* Method : Ad-Hoc
* Status : Accepted
* Runtime: 0.464
*/

import java.util.Scanner;

public class Main {

static int n = 0;
static int[] ergebnisse;
static int[] sLoesung;
static int[] sLoesungLaenge;
static int maxLaenge;

public static void main(String[] args) {
historyGrading();
}

public static void historyGrading() {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();

ergebnisse = new int[n];
sLoesung = new int[n];
sLoesungLaenge = new int[n];

for (int i = 1; i <= n; i++) {
ergebnisse[(scanner.nextInt()) - 1] = i;
}

// Test
// for (int i = 0; i < n; i++)
// {
// System.out.print(ergebnisse[i] + " ");
// }

while (scanner.hasNextInt()) {

for (int i = 1; i <= n; i++) {
sLoesung[(scanner.nextInt()) - 1] = i;
}

// Test
// for (int i = 0; i < n; i++)
// {
// System.out.print(sLoesung[i] + " ");
// }

for (int i = 0; i < n; i++) {
if (i == 0) {
sLoesungLaenge[i] = 1;
} else {
sLoesungLaenge[i] = laengeErmitteln(sLoesung[i], i);
}
}

if (maxLaenge == 0)
System.out.println("1");
else
System.out.println(maxLaenge);
maxLaenge = 0;
}
System.exit(0);
}

public static int laengeErmitteln(int zahl, int positionInSchleife) {
int laenge = 1;
// System.out.println("zu prüfende Zahl: " + zahl);
for (int i = positionInSchleife - 1; i >= 0; i--) {

// System.out.println("Durchgang " + positionInSchleife +
// ":"+sLoesung[i]);
// System.out.println("Stelle im Schülersarray: " + i);
// System.out.println("Länge im Schülersarray: " +
// sLoesungLaenge[i]);
// System.out.println("Vorgänger im Schülersarray: " +
// sLoesungVorgaenger[i]);
// System.out.println("Stelle im Ergebnisarray: " +
// stelleInLoesung(sLoesung[i]));
// System.out.println("Stelle Zahl im Ergebnisarray: " +
// stelleInLoesung(zahl));

if (stelleInLoesung(zahl) > stelleInLoesung(sLoesung[i])) {
if (sLoesungLaenge[i] >= laenge) {
laenge = sLoesungLaenge[i] + 1;
// System.out.println("Neue Länge: " + laenge );
if (laenge >= maxLaenge)
maxLaenge = laenge;
}

}

// System.out.println();
}

return laenge;
}

public static int stelleInLoesung(int zahl) {
for (int i = 0; i < n; i++) {
if (zahl == ergebnisse[i])
return i;
}
return -1;
}
}


2.


/**
* FWP, Ausgewählte Probleme aus dem ACM Programming Contest, WS09
* Problem: 111 - History Grading
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=47
*
* @author Dennis Wilfert
* @version 1.0, 11/27/2009
*
* Status : Accepted
* Runtime: 0.208
*/
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;

class Main {

public static void main(String[] args) throws IOException {

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer = new PrintWriter(new BufferedOutputStream(System.out));
StringTokenizer token;
int i, j;

// Anzahl der Elemente pro Zeile
int elements = Integer.parseInt(reader.readLine());
String line = reader.readLine();
token = new StringTokenizer(line);
int[] correct = new int[elements + 1];
int[] current = new int[elements + 1];
int[][] c = new int[elements + 1][elements + 1];

// Musterlösung einlesen
for (i = 1; i <= elements; i++) {
correct[Integer.parseInt(token.nextToken())] = i;
}

line = reader.readLine();

while (line != null) {

token = new StringTokenizer(line);

// Lösung eines Studenten einlesen
for (i = 1; i <= elements; i++) {
current[Integer.parseInt(token.nextToken())] = i;
}

// Mit Hilfe des LCS-Algorithmus die Punkte eines Studenten berechnen
for (i = 1; i <= elements; i++) {
for (j = 1; j <= elements; j++) {
if (correct[i] == current[j]) {
c[i][j] = 1 + c[i - 1][j - 1];
} else {
c[i][j] = c[i - 1][j] >= c[i][j - 1] ? c[i - 1][j] : c[i][j - 1];
}
}
}
// Punkte ausgeben
writer.println(c[elements][elements]);

line = reader.readLine();

}
writer.flush();
}
}