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 }  

 

posted @ 2016-04-19 20:47  pter  阅读(121)  评论(0编辑  收藏  举报