**
最大单调子序列问题 C++
**
题目描述
给出一个由n个数组成的序列x[1…n],找出它的最长单调上升子序列。
即求最大的m和a1,a2……,am,使得a1<a2<……<am且x[a1]<x[a2]<……<x[am]
代码
#include
#define n 10
using namespace std;
int main()
{
int a[n], left_re = 1, right_re = 1, i, l = 1, r = 1;
for (i = 1; i <= n; i++) cin >> a[i - 1];
for (i = 1; i < n; i++)
{
if (a[i] >= a[i - 1]) r = i + 1;
else
{
if (right_re - left_re < r - l) { right_re = r; left_re = l; l = r = i + 1; }
else { l = r = i + 1; }
}
}
if (right_re - left_re < r - l) { right_re = r; left_re = l; }
if (right_re - left_re > 1) for (i = left_re; i <= right_re; i++) cout << a[i - 1] << ’ ';
else cout << “error”;
}
n的取值自行定义
本文介绍了一个使用C++解决最长单调上升子序列问题的算法。通过遍历序列并比较元素,算法能找出序列中长度最长的连续递增子序列。此代码适用于由n个整数构成的序列。
1252

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



