#include<iostream>
#include<vector>
using namespace std;
vector<int> v;
int main(){
int M,N,L,num,maxn=0,dp[10010],hash[210];
scanf("%d%d",&N,&M);
for(int i=1;i<=M;i++){
scanf("%d",&num);
hash[num]=i;
}
scanf("%d",&L);
for(int i=0;i<L;i++){
scanf("%d",&num);
if(hash[num]>=1)
v.push_back(hash[num]);
}
for(int i=0;i<v.size();i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(v[i]>=v[j])
dp[i]=max(dp[j]+1,dp[i]);
}
maxn=max(dp[i],maxn);
}
printf("%d\n",maxn);
}
本文介绍了一种求解最长递增子序列的算法实现,通过动态规划的方法,结合哈希表进行元素映射,有效地解决了给定序列中最长递增子序列的问题。文章详细展示了算法的代码实现过程,包括输入输出、数据结构定义、关键步骤解析等。


被折叠的 条评论
为什么被折叠?



