#include<iostream>
using namespace std;
int main()
{
int n, i, j, l, k, b[200][10];
cin >> n;
for (i = 1; i <= n; i++)
{
cin >> b[i][1];//输入数据
b[i][2] = 1; b[i][3] = 0;//b[i][2]表示从i到n最长不下降序列的长度 b[i][3] 表示从i开始最长不下降序列的下一个位置,若b[i][3]=0则表示后边没连续项
}
for (i = n - 1; i >= 1; i--)
{
l = 0; k = 0;
for (j = i + 1; j <= n; j++)
if (b[j][1] >= b[i][1] && b[j][2] > l)
{
l = b[j][2];
k = j;
}
if (l > 0)
{
b[i][2] = l + 1; b[i][3] = k;
}
}
k = 1;
for (j = 1; j <= n; j++)//求最长不下降序列的起始位置
if (b[j][2] > b[k][2]) k = j;
cout <<"max="<< b[k][2] << endl;
while (k != 0)
{
cout << " " << b[k][1]; k = b[k][3];
}
}
1259:【例9.3】求最长不下降序列(!!!!超级重要!!!!!!!)**p329*
最新推荐文章于 2024-08-14 16:17:11 发布