子序列专题
最长递增子序列 LIS
用动态规划做。
Favorite Color Stripe (30)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <string.h>
#include <vector>
using namespace std;
int n,m,l,x,num,maxv;
int f[210],a[10010],dp[10010];
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%d",&x);
f[x]=i;
}
scanf("%d",&l);
for(int i=1;i<=l;++i){
scanf("%d",&x);
if(f[x]) a[++num]=f[x];
}
for(int i=1;i<=num;++i){
dp[i]=1; //对于每个元素,只有自己的话长度就是1
for(int j=1;j<i;++j)
if(a[j]<=a[i])
dp[i]=max(dp[i],dp[j]+1);
maxv=max(maxv,dp[i]);
}
printf("%d\n",maxv);
return 0;
}