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