#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int N=210;
int a[N],f[N],g[N];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
f[i]=1;//初始化
}
for(int i=2;i<=n;i++)//从i=2开始
for(int j=1;j<i;j++)
if(a[i]>=a[j]){
if(f[i]<f[j]+1){
f[i]=f[j]+1;
g[i]=j;//f[i]由g[i]转移而来
}
}
//找到最大f[k]的k
int k=0,res=0;
for(int i=1;i<=n;i++){
if(f[i]>res){
res=f[i];
k=i;
}
}
cout<<"max="<<f[k]<<endl;
//f[k]:以a[k]结尾的最大不降子序列长度
vector<int> ans;//存储方案
for(int i=1,len=f[k];i<=len;i++){
ans.push_back(a[k]);
k=g[k];
}
//反向输出
for(int i=ans.size()-1;i>=0;i--){
cout<<ans[i]<<' ';
}
return 0;
}
信息学奥赛一本通1259 求最长不下降序列
最新推荐文章于 2024-07-31 13:35:21 发布