uva 111 A History Grading


 1 /*
 2 lis变形 ,一开始没看出来,看了别人的解题报告才看出来
 3 题意:
 4    求相对位置,不变的最长序列
 5 
 6 
 7 */
 8 
 9 #include<stdio.h>
10 const int N=100;
11 int a[N],dp[N],rank[N];
12 int  max(int x,int y)
13 {
14     if(x>y)return x;
15     else return y;
16 }
17 int main()
18 {
19     int n,i,j,k;
20     scanf("%d",&n);
21     for(i=1;i<=n;i++)
22     {
23          scanf("%d",&k); 
24          rank[i]=k;
25     }
26     while(scanf("%d",&k)!=EOF)
27     {
28         a[k]=rank[1];
29         for(i=2;i<=n;i++)
30          {
31              scanf("%d",&k);
32              a[k]=rank[i];
33          }
34 
35           int ans=-1;
36          for(i=1;i<=n;i++)
37          {
38              dp[i]=1;
39              for(j=i-1;j>=1;j--)
40              {
41                  if(a[i]>a[j])
42                  dp[i]=max(dp[i],dp[j]+1);
43              }
44              ans=max(ans,dp[i]);
45 
46          }
47          printf("%d\n",ans);
48     }
49 
50 }


 
原文地址:https://www.cnblogs.com/acSzz/p/2510888.html