7-1 最长上升子序列 (10 分)
给定一个序列,求它的一个递增子序列,使它的元素个数尽量多,求该序列的最长上升子序列中元素个数。例如序列1,6,2,5,4,7的最长上升子序列是1,2,5,7或1,2,4,7,则其最长上升子序列中的元素个数为4。
输入格式:
第一行中输入序列的个数(不超过20),第二行中输入每个元素,以空格隔开。
输出格式:
输出该序列中最长上升子序列中的元素个数。
供参考:
#include<stdio.h>
int lis(int arr[], int len)
{
int *longest = (int *)malloc(sizeof(int)*len);
for (int i=0; i<len; i++)
longest[i] = 1;
for (int j=1; j<len; j++) {
for (int i=0; i<j; i++) {
if (arr[j]>arr[i] && longest[j]<longest[i]+1){
longest[j] = longest[i] + 1;
}
}
}
int max = 0;
for (int j=0; j<len; j++)
if (longest[j] > max) max = longest[j]; //从longest[j]中找出最大值
return max;
}
int main()
{
int i,n,arr[20];
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&arr[i]);
printf("max len=%d\n",lis(arr,n));
return 0;
}