#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[210],dp[210],n,maxx=-1,k,ans[210],pre[210];
cin>>n;
memset(pre,0,sizeof(pre));//初始化全部为0,否则下面while循环里面跳不出来
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)
{
dp[i]=1;
for(int j=1;j<i;j++)
if(a[i]>=a[j]&&dp[j]+1>dp[i])
{
dp[i]=dp[j]+1;//dp[i]是当前下标为i的值当前最长不下降序列的最长长度
pre[i]=j;//pre[i]是比当前下标为i的值小的最贴近的一个下标j
}
if(dp[i]>maxx)
{
maxx=dp[i];
k=i;
}
}
cout<<"max="<<maxx<<endl;
int cnt=0;
while(k)
{
ans[++cnt]=a[k];
k=pre[k];//采用递归的方式寻找下一个下标
}
for(int i=cnt;i>0;i--)cout<<ans[i]<<" ";
}
求最长不下降序列
最新推荐文章于 2024-03-08 17:43:59 发布