题解 | #最长上升子序列(一)#

最长上升子序列(一)

https://www.nowcoder.com/practice/5f65ccbb025240bd8458eb6479c2612e

#include <cstdio>

int main(){
    int n,i,index;
    scanf("%d",&n);;
    int a[n];
    for(i = 0;i< n;i++) {
        scanf("%d",&a[i]);
    }
    int L[1000];
    for (i = 0; i < n; ++i) { //初始化,最长递增子序列长度为1
        L[i] = 1;

    }

    for (i = 1; i < n; ++i) {   //依次计算a【0】-a【i】的最长递增子序列
        int max = 1; // 初试时,递增子序列长度为1
        for (int j = i - 1; j >= 0; --j) {
            if ((a[j] < a[i]) && (max < L[j] + 1)) { //对于所有的a[j] < a[i],需要满足严格上升,且始终为最大长度
                max = L[j] + 1;
                L[i] = max;
            }
            }

        }
        for (index = 0,i=1; i < n; ++i) { // 求所有子序列的最大长度
            if (L[index] < L[i]){
                index = i;
            }
        }
        printf("%d",L[index]);

    return 0;
    }

全部评论

相关推荐

10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务