UVA 111 History Grading
读题读了好久,其实就是在输入数据时要对数据的位置进行相应的改变
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 int order[25], arr[25], d[25][25]; 6 7 int main() 8 { 9 int n, t; 10 scanf("%d",&n); 11 // 读入正确的答案顺序 12 for(int i=0; i<n; ++i) 13 { 14 scanf("%d",&t); 15 order[t-1]=i+1; //放入他排名的位置 16 } 17 while(~scanf("%d",&t)) 18 { 19 arr[t-1]=1; 20 for(int i=1; i<n; ++i) 21 { 22 scanf("%d",&t); 23 arr[t-1]=i+1; 24 } 25 // 求出最长公共子序列长度 26 memset(d, 0, sizeof(d)); 27 for(int i=1; i<=n; ++i) 28 { 29 for(int j=1; j<=n; ++j) 30 { 31 if(order[i-1]==arr[j-1]) 32 d[i][j]=d[i-1][j-1]+1; 33 else 34 d[i][j]=max(d[i-1][j],d[i][j-1]); 35 } 36 } 37 printf("%d\n", d[n][n]); 38 } 39 return 0; 40 }