#include<bits/stdc++.h>
using namespace std;
const int N=100000;
int f[N];
int g[N];
int a[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
f[i]=1;
g[i]=0;
for(int j=1;j<i;j++)
{
if(a[j]>a[i])
{
if(f[i]<f[j]+1)
{
f[i]=f[j]+1;
g[i]=j;
}
}
}
}
int k=1;
for(int i=1;i<=n;i++)
if(f[k]<f[i]) k=i;
for(int i=0,len=f[k];i<len;i++) //输出来是反着的
{
printf("%d ",a[k]);
k=g[k];
}
return 0;
}
记录最长上升子序列路径
最新推荐文章于 2022-06-01 21:14:29 发布