题目链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=47
using namespace std;
int save1[30],save2[30];
int dp[30][30];
int main()
{
int n,temp;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&temp);
save1[temp]=i;
}
while(scanf("%d",&temp)!=EOF)
{
save2[temp]=1;
for(int i=2;i<=n;i++)
{
scanf("%d",&temp);
save2[temp]=i;
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(save1[i]==save2[j])
dp[i][j]=dp[i-1][j-1]+1;//max(max(dp[i-1][j-1]+1,dp[i-1][j]),dp[i][j-1]);
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
printf("%d\n",dp[n][n]);
}
return 0;
}