E -スーパージャンプ!ジャンプ!ジャンプ!1087 - HDU
トピックへのリンク:https://vjudge.net/contest/68966#problem/E
トピック:
今日では、「スーパージャンプと呼ばれるチェスのゲームの一種!ジャンプ!ジャンプは!」HDUで非常に人気があります。たぶん、あなたはいい子です、このゲームについて少し知っているので、私は今あなたにそれを紹介します。
ゲームは、二つ以上の2人のプレイヤーで再生することができます。それは、チェス盤(棋盘)といくつかの駒(棋子)で構成され、すべての駒は、正の整数または「開始」または「終了」でマークされています。プレイヤーは、始点から開始しなければならないが最終的にエンドポイントにジャンプします。ジャンプの過程で、プレイヤーはパスで駒を訪問しますが、誰もが必要では(あなたが開始する点は、最小で、エンドポイントが最大であると仮定することができます。)1 chessmanから別のものに絶対的に大きなジャンプします。そして、すべてのプレイヤーは後方に行くことができません。一つのジャンプは次の、また多くの駒を越えて行くことができますしchessmanから行くことができ、さらにはあなたがまっすぐに始点から終点までを得ることができます。もちろん、このような状況では、ゼロポイントを得ます。プレイヤーは、彼が彼のジャンプソリューションに応じて、より大きなスコアを取得することができます場合にのみ勝者です。
あなたの仕事は、与えられた駒のリストに従って出力する最大値です。
ゲームは、二つ以上の2人のプレイヤーで再生することができます。それは、チェス盤(棋盘)といくつかの駒(棋子)で構成され、すべての駒は、正の整数または「開始」または「終了」でマークされています。プレイヤーは、始点から開始しなければならないが最終的にエンドポイントにジャンプします。ジャンプの過程で、プレイヤーはパスで駒を訪問しますが、誰もが必要では(あなたが開始する点は、最小で、エンドポイントが最大であると仮定することができます。)1 chessmanから別のものに絶対的に大きなジャンプします。そして、すべてのプレイヤーは後方に行くことができません。一つのジャンプは次の、また多くの駒を越えて行くことができますしchessmanから行くことができ、さらにはあなたがまっすぐに始点から終点までを得ることができます。もちろん、このような状況では、ゼロポイントを得ます。プレイヤーは、彼が彼のジャンプソリューションに応じて、より大きなスコアを取得することができます場合にのみ勝者です。
あなたの仕事は、与えられた駒のリストに従って出力する最大値です。
InputInputは、複数のテストケースが含まれています。各テストケースは、以下のように行に記載されている:
N値_1 _2 ... value_N
Nが1000以上のものではなく、全てvalue_i 32-INTの範囲にあることguarantiedれます。
0から始まるテストケースは、入力を終了し、このテストケースは、処理されるべきではありません。
OutputForそれぞれの場合は、ルールに従った最大の印刷、1つのライン一つのケース。
サンプル入力
3 1 3 2 4 1 2 3 4 4 3 3 2 1 0サンプル出力
4 10 3。
イタリアでは、ということ:あなたがn個、最長の不連続単調に増加するシーケンスと彼を見つける
のアイデア:最長の単調なシーケンスの前にDPを[i]はiとストレージ
// // 2019年8月4日に羽生によって作成されます。 // する#include <アルゴリズム> 書式#include <iostreamの> の#include <cstdioを> する#include <CStringの> の#include <キュー> の#include < 設定 > 書式#include <math.h>の 書式#include <マップ> 使用して 名前空間はstd; typedefの長い 長いLL。 const int型 MAXN = 1E5 + 7 。 INT のmain() { int型のn; しばらく(〜のscanf(" %d個"、&N) { INT [MAXN]、DP [MAXN]。 memsetの(DP、0、はsizeof (DP))。 memset(0、はsizeof (a)参照)。 以下のために(int型私= 0 ; iがN <; Iは++ ) { scanf関数(" %のD "、および[I])。 } のために(int型 i = 0 ; iがn <; iは、++は) { DPは[I] = [I]。 以下のための(int型 J = 0 ; jの<I、J ++) { 場合([I]> [J]) DP [I] = MAX(DP [I]、DP [J] + [I])。 } } int型の結果= 0 。 以下のために(int型 i = 0 ; iがn <I ++の) { 結果 = MAX(DP [i]は、結果)。 } のprintf(" %d個の\ n " 、結果)。 } 戻り 0 。 }