lcis
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<cstdio> #include<cstring> #include<algorithm> #define maxn 504 using namespace std; int a[maxn]; int b[maxn]; int f[maxn]; int pre[maxn][maxn]; int biao[maxn]; int main() { int n,m; int t; while(scanf("%d",&n)!=EOF) { memset(f,0,sizeof f); memset(pre,0,sizeof pre); 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]); for(int i=1; i<=n; i++) { int ma=0; int tmp=0; for(int j=1; j<=m; j++) { if(a[i]==b[j]) { f[j]=ma+1; pre[i][j]=tmp; } if(a[i]>b[j]&&ma<f[j]) { ma=f[j]; tmp=j; } } } int ma=0; int tmp=0; for(int i=1; i<=m; i++) { if(ma<f[i]) { ma=f[i]; tmp=i; } } printf("%d ",ma); int cnt=0; int x=n,y=tmp; while(ma--) { while(a[x]!=b[y])x--; biao[cnt++]=b[y]; y=pre[x][y]; x--; } for(int i=cnt-1;i>0;i--) printf("%d ",biao[i]); printf("%d ",biao[0]); } return 0; }