[[原文:http://acm.pku.edu.cn/JudgeOnline/problem?id=2533]] ---- ''時間制限'':2000ミリ秒 ''メモリ制限'':65536KB &br; *問題 [#ua5a176c] 数列a が、a 1 < a 2 < . . . < a N を満たすとき、数列a を「順序付けられている」と呼ぶことにする。数列 (a 1 , a 2 , . . . , a N ) が与えられたとき、1 <= i 1 < i 2 < . . . < i K <= N を満たすなら、数列(a i 1 , a i 2 , . . . , a i k ) は それの部分列である。例えば、数列(1, 7, 3, 5, 9, 4, 8) は、順序付けられた部分列を持つ。例えば、(1, 7), (3, 4, 8) などである。最も長い「順序付けられた部分列」は長さが4で、(1, 3, 5, 8) である。 数列が与えられたとき、その数列の最も「長い順序付けられた部分列」の長さを求めるプログラムを作成せよ。 *入力 [#b262159f] 入力は、2 行から成る。1 行目には、数列の長さN(1 <= N <= 1000) が書かれている。2 行目には、数列の各 要素が、空白区切りで書かれている。各要素は、0 以上 10000 以下である。 *出力 [#d1ef3e86] 最長の「順序付けられた部分列」の長さを表す1 つの整数を出力せよ。 *入力の例 [#m5eae7ff] 7 1 7 3 5 9 4 8 *出力の例 [#r8be8846] 4 *出典 [#p8da5a11] Central Europe 1995