题目链接
题意:给定两个串求最长公共上升子序列
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=505;
int n,m,dp[maxn],a[maxn],b[maxn],pre[maxn];
void dfs(int ans)
{
if(ans==0) return ;
dfs(pre[ans]);
printf("%d ",b[ans]);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=1;i<=m;++i) scanf("%d",&b[i]),pre[i]=0;
for(int i=1;i<=n;++i)
{
int pos=0;
for(int j=1;j<=m;++j)
{
if(a[i]==b[j]) dp[j]=dp[pos]+1,pre[j]=pos;
if(a[i]>b[j]&&dp[pos]<dp[j]) pos=j;
}
}
int ans=0,maxx=0;
for(int i=1;i<=m;++i)
{
if(maxx<dp[i]) maxx=dp[i],ans=i;
}
printf("%d\n",maxx);
dfs(ans);
}