本题属于动态规划问题中的求最长递增子序列问题。首先将favorite color numbers映射到一个递增的数字序列再求最大子序列。
#define _CRT_SECURE_NO_WARNINGS
#include<string>#include<string.h>
#include<vector>
#include<map>
#include<stack>
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
int N;
cin >> N;
int *order = new int[N + 1];
memset(order, 0, (N + 1)*sizeof(int));
int M;
cin >> M;
for (int i = 0; i < M; i++)
{
int tmp;
scanf("%d", &tmp);
order[tmp] = i + 1;
}
int L;
cin >> L;
int *stripe = new int[L];
int *number = new int[L];
memset(stripe, 0, (L)*sizeof(int));
int max=0;
for (int i = 0; i < L; i++)
{
scanf("%d", &number[i]);
if (order[number[i]] != 0)
{
for (int j = 0; j < i; j++)
{
if (order[number[j]] == 0)
continue;
if (order[number[i]] >= order[number[j]])
{
if (stripe[j]>=stripe[i])
{
stripe[i] = stripe[j] + 1;
}
}
}
if (stripe[i]== 0)
stripe[i]=1;
if (stripe[i] > max)
{
max = stripe[i];
}
}
}
cout << max << endl;
return 0;
}