考察最长非连续子序列,有点变种
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int n, m, l;
typedef struct Node
{
int len, pre;
}Node;
int main()
{
while(scanf("%d",&n)!=EOF)
{
scanf("%d",&m);
vector<int> fc(m);
map<int,int> color2id;
for(int i = 0; i < m; ++i)
{
int c;
scanf("%d",&c);
fc[i] = c; color2id.insert(make_pair(c, i));
}
//
scanf("%d",&l);
vector<int> a;
for(int i = 0; i < l; ++i)
{
int c;
scanf("%d",&c);
map<int,int>::iterator it = color2id.find(c);
if(it!=color2id.end())
a.push_back(it->second);
}
//get the maximum non-continuous subsequence
int realn = a.size();
vector<int> d(realn, 1);
if(realn == 0)
printf("0\n");
else
{
//d[0] = 1; //d[0].pre = 0;
for(int i = 1; i < realn; ++i)
{
//get the maximum one
for(int j = 0; j < i; ++j)
{
if(a[i] >= a[j])
d[i] = max(d[i], d[j]+1);
}
}
//then get the max
int mmax = 0;
for(int i = 0; i < realn; ++i)
mmax = max(d[i], mmax);
printf("%d\n",mmax);
}
}
return 0;
}