读题读了好久,其实就是在输入数据时要对数据的位置进行相应的改变
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int order[], arr[], d[][]; int main()
{
int n, t;
scanf("%d",&n);
// 读入正确的答案顺序
for(int i=; i<n; ++i)
{
scanf("%d",&t);
order[t-]=i+; //放入他排名的位置
}
while(~scanf("%d",&t))
{
arr[t-]=;
for(int i=; i<n; ++i)
{
scanf("%d",&t);
arr[t-]=i+;
}
// 求出最长公共子序列长度
memset(d, , sizeof(d));
for(int i=; i<=n; ++i)
{
for(int j=; j<=n; ++j)
{
if(order[i-]==arr[j-])
d[i][j]=d[i-][j-]+;
else
d[i][j]=max(d[i-][j],d[i][j-]);
}
}
printf("%d\n", d[n][n]);
}
return ;
}