这个题的输入刚开始没看明白,ci代表事件c发生的顺序是i,所以最后相当于是是对i求最长公共子序列。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int cor[25],stu[25];
int c[25][25];
int main()
{
//freopen("in.txt","r",stdin);
int n;
int x;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>x;
cor[x]=i;
}
while(cin>>stu[1])
{
stu[stu[1]]=1;
for(int i=2; i<=n; i++)
{
cin>>x;
stu[x]=i;
}
memset(c,0,sizeof(c));
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(cor[i]==stu[j])
c[i][j]=c[i-1][j-1]+1;
else
c[i][j]=max(c[i-1][j],c[i][j-1]);
cout<<c[n][n]<<endl;
}
return 0;
}