本题注意的点是可能出现不需要的颜色,提前就应该剔去这个点,也可以使这个点的值最大,这样也能将它并入其中。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=10010;
int d[maxn]={0},a[maxn],index[maxn]={0};
int main()
{
int n,m,k,ans=-1,temp,num=1;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
scanf("%d",&temp);
index[temp]=i;
}
cin>>k;
for(int i=1;i<=k;i++)
{
scanf("%d",&a[num]);
if(index[a[num]]==0)
{
continue;
}
else
{
num++;
}
}
for(int i=1;i<num;i++)
{
d[i]=1;
for(int j=1;j<i;j++)
{
if(index[a[i]]>=index[a[j]]&&(d[j]+1)>d[i])
d[i]=d[j]+1;
}
ans=max(ans,d[i]);
}
printf("%d",ans);
}