Longest Ordered Subsequence
Description
A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ..., aN) be any sequence (ai1, ai2, ..., aiK), where 1 <= i1 < i2 < ... < iK <= N. For example, sequence (1, 7, 3, 5, 9, 4, 8) has ordered subsequences, e. g., (1, 7), (3, 4, 8) and many others. All longest ordered subsequences are of length 4, e. g., (1, 3, 5, 8).
Your program, when given the numeric sequence, must find the length of its longest ordered subsequence.
Input
The first line of input file contains the length of sequence N. The second line contains the elements of sequence - N integers in the range from 0 to 10000 each, separated by spaces. 1 <= N <= 1000
Output
Output file must contain a single integer - the length of the longest ordered subsequence of the given sequence.
Sample Input
7 1 7 3 5 9 4 8
Sample Output
4
题意描述:
求一组序列的最长上升子序列。
解题思路:
定义一个len[ ]数组存储当前位置是的上升序列数初始化都为1,因所有数本身就是一个上升序列,从第二个数开始查起,当它的前面有数小于它且上升序列数还比它大是更新上升序列数,当查找完当前数的前面所有数后,当前数的上升序列数加一,最后找出len[ ]数组中最大的数就是上升子序列。
#include<stdio.h>
int len[1010],a[1010];
int main()
{
int n,tempmax,i,k;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
len[i]=1;
}
for(i=2;i<=n;i++)
{
tempmax=0;
for(k=1;k<i;k++)
if(a[k]<a[i]&&tempmax<len[k])
tempmax=len[k];
len[i]=tempmax+1;
}
tempmax=-1;
for(i=1;i<=n;i++)
if(tempmax<len[i])
tempmax=len[i];
printf("%d\n",tempmax);
}
return 0;
}