最長サブシーケンス順序- N 2533 - POJ
トピックへのリンク:https://vjudge.net/contest/68966#problem/N
トピック:
最長の注文サブシーケンスA1 <A2 <... <AN場合は、数字の列がaiをソート。配列は(A1、A2、...、Anは与えられた数の配列を与える ) 任意の配列(AI1、AI2、...、AIKである )、 1 <= I1 <I2 <... <IK <= N 例えば、シーケンス(1,7,3,5,9,4,8)は、例えば、順序付けられた配列を有します。グラム。、(1,7)、(3,4,8)および他の多くの。すべての最長の長さが4、Eのサブシーケンスを命じました。グラム。、(1,3,5,8)。
数字の場合は所定の配列、あなたのプログラムは、順序付けられたシーケンスのその最長の長さを見つける必要があります。
入力
入力ファイルの最初の行は、Nの配列長を含みます Nの整数、範囲、0から10,000のスペースで区切られた各-第二列は、配列の要素を含みます。1 <= N <= 1000が
得られる
所定の配列の順序付けられた配列の最長の長さ-出力ファイルは整数を含まなければなりません。
サンプル入力
。7
。1. 8 7 3 4 5 9
出力例
4
考える:LISの問題を、我々は注意DP 1の[i]の初期値を支払わなければなりません。
// // 2019年8月8日に羽生によって作成されます。 // する#include <アルゴリズム> 書式#include <iostreamの> の#include <cstdioを> する#include <CStringの> の#include <キュー> の#include < 設定 > 書式#include <math.h>の 書式#include <マップ> 使用して 名前空間はstd; typedefの長い 長いLL。 const int型 MAXN = 1000年 + 7 。 #define MAX 0x3f3f3f3f INT のmain() { int型のT。 同時に(〜のscanf(" %dの"、&T)) { int型DP [MAXN]、[MAXN]。 memsetの(DP、0、はsizeof (DP))。 以下のために(int型私= 0 ; iがTを<; Iは++ ) { scanf関数(" %のD "、および[I])。 } のために(int型 i = 0 ; iはTを<; iは++ ) { DP [I] = 1 。 以下のための(int型 J = 0 ; J <= iであり、j ++) { 場合([J] < [i])と DP [I] = MAX(DP [I]、DP [J] + 1 )。 } } int型 MAXX = - 1 。 以下のために(int型 i = 0 ; iはTを<; iは++ ) { MAXX = MAX(MAXX、DP [I])。 } のprintf(" %d個の\ n " 、MAXX)。 } 戻り 0 。 }