最长公共子序列
#include <stdio.h>
#include <memory.h>
int correct[30];
int stu[30];
int dp[30][30];
int get_max(int a, int b) {
if (a>b)
return a;
else
return b;
}
int main() {
int n,i,j;
int tmp;
scanf("%d",&n);
for (i=1;i<=n;i++) {
scanf("%d",&tmp);
correct[tmp]=i;
}
while (scanf("%d",&tmp)!=EOF) {
stu[tmp]=1;
for (i=2;i<=n;i++) {
scanf("%d",&tmp);
stu[tmp]=i;
}
memset(dp,0,sizeof(dp));
for (i=1;i<=n;i++) {
for (j=1;j<=n;j++) {
if (correct[i]==stu[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=get_max(dp[i-1][j], dp[i][j-1]);
}
}
printf("%d\n", dp[n][n]);
}
return 0;
}