AcWing 895. 最长上升子序列
原题链接
简单
作者:
Drifter
,
2021-01-09 15:28:54
,
所有人可见
,
阅读 242
寒假打卡
1.9
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int n;
int a[N],f[N],pre[N];//pre记录前驱结点
int main(void)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
f[i]=1;
for(int j=1;j<i;j++)
if(a[j]<a[i])
if(f[i]<f[j]+1)
{
f[i]=f[j]+1;
pre[i]=j;
}
}
int k=1;
for(int i=1;i<=n;i++)
if(f[k]<f[i])
k=i;
printf("%d\n",f[k]);
for(int i=0,len=f[k];i<len;i++)
{
printf("%d ",a[k]);
k=pre[k];
}
return 0;
}