算法题:最长上升子序列

来源:互联网 发布:2015淘宝刷钻价格表 编辑:程序博客网 时间:2024/05/29 13:57

题目描述
广场上站着一支队伍,她们是来自全国各地的扭秧歌代表队,现在有她们的身高数据,请你帮忙找出身高依次递增的子序列。 例如队伍的身高数据是(1、7、3、5、9、4、8),其中依次递增的子序列有(1、7),(1、3、5、9),(1、3、4、8)等,其中最长的长度为4。
输入描述:

输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000)。

紧接着第二行包含n个正整数m(1≤n≤10000),代表队伍中每位队员的身高。

输出描述:

对应每一组数据,输出最长递增子序列的长度。

输入例子:

7
1 7 3 5 9 4 8
6
1 3 5 2 4 6

输出例子:

4
4

#include <iostream>using namespace std;int main(){    int n;    while(cin>>n)    {        int m = n;        int val;        int *a = new int[n];        int k = 0;        while(m--)        {            cin>>val;            a[k++]=val;        }        int max=1;        int *b = new int[n];        for(int i=0;i<k;i++)        {            b[i]=1;            for(int j=0;j<i;j++)            {                if(a[j]<a[i])                {                  if(b[j]+1>b[i])                  {                      b[i]=b[j]+1;                      if(max<b[i])                                            max=b[i];                  }                  }            }        }        cout<<max<<endl;    }    return 0;}
1 0