#include<bits/stdc++.h>
using namespace std;
int n,f[107][4],maxx,maxl;
int dg(int n)
{
if(f[n][3]==0) cout<<f[n][1]<<" ";
else
{
dg(f[n][3]);
cout<<f[n][1]<<" ";
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>f[i][1];
f[i][2]=1;
f[i][3]=0;
}
for(int i=2;i<=n;i++)
for(int j=1;j<=i;j++)
{
if(f[i][1]>f[j][1] && (f[j][2]+1>f[i][2]))
{
f[i][2]=f[j][2]+1;
f[i][3]=j;
if(f[i][2]>maxx)
{
maxx=f[i][2];
maxl=i;
}
}
}
cout<<"max="<<maxx<<endl;
dg(maxl);
}最长不下降子序列—递归输出最长链
最新推荐文章于 2021-08-31 16:12:07 发布
本文介绍了一种求解最长递增子序列(LIS)问题的高效算法,并通过C++代码实现。该算法使用动态规划思想,记录每个元素在最长递增子序列中的位置,最终输出最长递增子序列的长度及具体元素。
1122

被折叠的 条评论
为什么被折叠?



