最长公共子序列,算法导论上有。
唯一要注意的是这段话
Given the correct chronological order of n events as where denotes the ranking of eventi in the correct chronological order and a sequence of student responses where denotes the chronological rank given by the student to eventi;
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
int x[21], y[21];
int past[21], cur[21];
int n, t;
scanf("%d", &n);
// FILE* fp = fopen("in.txt", "r");
for (int i = 1; i <= n; i++)
{
scanf( "%d", &t);
x[t] = i;
}
while (scanf("%d", &t) != EOF)
{
int i = 1;
y[t] = i;
for (i = 2; i <= n; i++)
{
scanf( "%d", &t);
y[t] = i;
}
for (int i = 0; i <= n; i++)past[i] = 0, cur[i] = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (y[j] == x[i])cur[j] = past[j - 1] + 1;
else cur[j] = max(cur[j - 1], cur[j]);
}
for (int j = 1; j <= n; j++)past[j] = cur[j];
}
printf("%d\n", cur[n]);
}
return 0;
}