POJ

来源:互联网 发布:java中compareto 编辑:程序博客网 时间:2024/06/01 09:16

题意很简单,给定一串无序 数列, 找其中 严格上升子序列的 长度
开始接触时 用的DP,but 耗时多,后来又学了一下方法(很简单
怎么理解呢?看下面:
假装数列开始就是上升子序列,放入新数列中(题解中的a[]),,在这之后的每一个数,满足上升条件,放在后面,长度加一;不满足条件,替换队列中第一个大于他的数,因为后面可能会形成一个以这个数为开头的上升序列。原数列遍历完全后,形成的新串长度 即为所求
(细节可能与题解不符)

#include<stdio.h> // 比我开始写的那个好多了好多了int main() {      // 都算是插排    int a[10005];    int n, i, j, t, mmax = 0;    scanf("%d", &n);    for(i = 0; i < n; ++i) {        a[i] = 10005;        scanf("%d", &t);        for(j = 0; a[j] < t; ++j);        a[j] = t;        if(mmax < j + 1) mmax = j + 1;    }    printf("%d", mmax);    return 0;}
1 0
原创粉丝点击