最长连续子系列
【问题描述】给定一个无序的整数序列a[0…n-1],求其中最长递增子序列的长度。
例如,a[]={2,1,5,3,6,4,8,9,7},n=9,其最长递增子序列为{1,3,4,8,9},结果为5。
#include
using namespace std;
#define MAX 20
int a[MAX] = { 2,1,5,3,6,4,8,9,7 }, b[MAX][MAX] = { 0 };
int n=9, max = -9999, maxpes = -1;
void bfs(int s)
{
if (s >= n)
{
for (int j = 0; j < n; j++)
{
if (b[j][n] > max)//查看从那第元素开始算起,最大的那个递增子序列
{
max = b[j][n];
maxpes = j;
}
}
return;
}
int num = 0, i;
int tempt1 = -9999;
for(i=s; i<n; i++)
{
if (a[i] > tempt1)//判断前驱元素大于当前元素是否
{
tempt1 = a[i];//赋值前驱元素
num = num + 1;
b[s][i] = 1; //标记第从S个元素起那个元素是递增的子序列
}
else
continue;
}
b[s][i] = num; //在第N位将从第S个元素起,总共有多少个递增子序列
bfs(s + 1);
}
int main()
{
bfs(0);
cout << max << endl;
for (int i = 0; i < n; i++)
{
if (b[maxpes][i] == 0) continue;
cout << a[i] << " ";
}
cout << endl;
return 0;
}