对于一个给定的序列,输出其最大的子序列,如 {1,3,8,2,4,10},最大子序列是{1,2,4,10}。
扩展:这里有个问题,可能存在多个最大子序列,如何记录所有的呢?
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
int f(int [],int);
int a[6]={1,3,8,2,4,10};
int m=f(a,6);
cout<<"最长递增子序列的长度是"<<m<<endl;
return 0;
}
int f(int arr[],int size)
{
//把不合法的输入考虑进来
if(arr==NULL||size <= 0)
{
cout<<"error input"<<endl;
exit(0);
}
int *Loc = new int[size];
int pos;
for(int i = 0; i< size; ++i)
{
Loc[i] = 1;
for(int j = 0;j < i; ++j)
{
if(arr[i]>arr[j] && ( Loc[i] < Loc[j]+1))
{
Loc[i] = Loc[j]+1;
//pos = i;
}
}
} // Loc[i]为最大值
//寻找最长子序列
int Max = 0;
for(int i = 0;i<size; ++i)
{
if(Loc[i]>Max)
{
Max = Loc[i