DP求解最长不下降子序列
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 210;
const int maxc = 100010;
int hashTable[maxn] = {0};
int dp[maxc];
int main(){
int n, m;
scanf("%d%d", &n, &m);
for(int i=1; i<=m; i++){
int x;
scanf("%d", &x);
hashTable[x] = i;
}
int l;
scanf("%d", &l);
int num = 1, A[maxc];
for(int i=1; i<=l; i++){
int x;
scanf("%d", &x);
if(hashTable[x] > 0){
A[num++] = hashTable[x];
}
}
int ans = -1;
for(int i=1; i<num; i++){
dp[i] = 1;
for(int j=1; j<i; j++){
if(A[i]>=A[j] && dp[j]+1>dp[i]){
dp[i] = dp[j] + 1;
}
}
ans = max(ans,dp[i]);
}
printf("%d", ans);
return 0;
}