这道c++题如何解决

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;
}