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,siz...