// 貪欲プラスDP の#include <iostreamの> 使用して名前空間STD; CONST INT N = 1010 ; INT N-; int型Q [N]; int型F [N]; int型 G [N]; // 各配列の最後に格納された数int型のmain(){ 一方(CIN >> Q [N-])N - ++ ; INT RES = 0 ; のための(INT I = 0、I <N - 、I ++ ){ F [I] = 1 ; のための(INT J = 0。 J <I、J ++ ){ IF(Q [J]> = Q [I]) F [I] = MAX(F [I]、F [J] + 1 ); RES = MAX(RES、F [I]); } } COUT << << RES ; ENDL INT CNT = 0 ; //は、配列の数を示している ため(INT Iは= 0 ; I <N-; I ++ ){ int型 = K 0 ; //は、数列が横断した表し 、一方(Kを<CNT && Gは、[K] <Q [I])// 全ての配列を横断終了し、最後のシーケンスQ [I]より小さくない K ++; // 後で検索 G [K] = Q [I]; // サイクルが終了し、いずれかの完全見つけるのいずれかよりも、すべての配列が小さい横断 IF(K> = CNT)CNT ++を; // 最初の時刻kは0であり、CNT IS 0そう直接G [K] = Q [I] // なぜなら、K> = CNT CNT ++すなわち、それは配列を有する } COUTを << CNT << ENDL; 戻り 0 ; }