質問:
スーパージャンプ!ジャンプ!ジャンプ!
制限時間:1000分の2000 MS(Javaの/その他)メモリの制限:32768分の65536 K(Javaの/その他)
の合計提出(S):56626受理提出(S):26273
問題の説明
今日では、「スーパージャンプと呼ばれるチェスのゲームの一種!ジャンプ!ジャンプは!」HDUで非常に人気があります。たぶん、あなたはいい子です、このゲームについて少し知っているので、私は今あなたにそれを紹介します。
ゲームは、二つ以上の2人のプレイヤーで再生することができます。それは、チェス盤(棋盘)といくつかの駒(棋子)で構成され、すべての駒は、正の整数または「開始」または「終了」でマークされています。プレイヤーは、始点から開始しなければならないが最終的にエンドポイントにジャンプします。ジャンプの過程で、プレイヤーはパスで駒を訪問しますが、誰もが必要では(あなたが開始する点は、最小で、エンドポイントが最大であると仮定することができます。)1 chessmanから別のものに絶対的に大きなジャンプします。そして、すべてのプレイヤーは後方に行くことができません。一つのジャンプは次の、また多くの駒を越えて行くことができますしchessmanから行くことができ、さらにはあなたがまっすぐに始点から終点までを得ることができます。もちろん、このような状況では、ゼロポイントを得ます。プレイヤーは、彼が彼のジャンプソリューションに応じて、より大きなスコアを取得することができます場合にのみ勝者です。
あなたの仕事は、与えられた駒のリストに従って出力する最大値です。
ゲームは、二つ以上の2人のプレイヤーで再生することができます。それは、チェス盤(棋盘)といくつかの駒(棋子)で構成され、すべての駒は、正の整数または「開始」または「終了」でマークされています。プレイヤーは、始点から開始しなければならないが最終的にエンドポイントにジャンプします。ジャンプの過程で、プレイヤーはパスで駒を訪問しますが、誰もが必要では(あなたが開始する点は、最小で、エンドポイントが最大であると仮定することができます。)1 chessmanから別のものに絶対的に大きなジャンプします。そして、すべてのプレイヤーは後方に行くことができません。一つのジャンプは次の、また多くの駒を越えて行くことができますしchessmanから行くことができ、さらにはあなたがまっすぐに始点から終点までを得ることができます。もちろん、このような状況では、ゼロポイントを得ます。プレイヤーは、彼が彼のジャンプソリューションに応じて、より大きなスコアを取得することができます場合にのみ勝者です。
あなたの仕事は、与えられた駒のリストに従って出力する最大値です。
入力
入力は複数のテストケースが含まれています。各テストケースは、以下のように行に記載されている:
N値_1 _2 ... value_N
Nが1000以上のものではなく、全てvalue_i 32-INTの範囲にあることguarantiedれます。
0から始まるテストケースは、入力を終了し、このテストケースは、処理されるべきではありません。
N値_1 _2 ... value_N
Nが1000以上のものではなく、全てvalue_i 32-INTの範囲にあることguarantiedれます。
0から始まるテストケースは、入力を終了し、このテストケースは、処理されるべきではありません。
出力
各場合について、ルールに従って、最大、1つのライン一つのケースを印刷します。
サンプル入力
3 1 3 2 4 1 2 3 4 4 3 3 2 1 0
サンプル出力
4 10 3
著者
LCY
アイディア:
最初のものは、入力データの保存に使用するデータであり、入力されたデータを保存するために、2つの配列を作成し、それはとにかく変更しないであろう、他の一つは入力データを格納し、すべてのサークルを変更することの結果である、それはの和を格納しますすべての要素がそれより小さい最後でこのKONT、前増サブシーケンス。
それは単にDPです
中国語翻訳:
2つの配列の定義は、最初のアレイはデータであり、入力された情報を格納するために使用される、彼は変更されない、とのみアクセスすることができる
更なる結果は、サブシーケンスを増加させる各ノードに最初のノードを格納するために、アレイでありますそして、最終的にはこれは、指定されたノードのシーケンスの子ノードをインクリメントする最初のストレージアレイであると
、結果の配列を横断することによって、最大の増加部分列を取得することができます
ソースコード:
インポートjava.util.Scanner; / ** * 3 1 3 2 * 4 1 2 3 4 * 4 3 3 2 1 * 0 * / パブリック クラスメイン{ 静的スキャナSC = 新しいスキャナ(System.in)。 パブリック 静的 ボイドメイン(文字列[]引数){ 一方(真){ int型 ammount = sc.nextInt()。 もし(ammount == 0)ブレーク。 int型のデータは= [] 新しい INT [ammount]。 INT []結果= 新しい int型【のammount]; のためには、(int型 I = 0; Iはammountを<; Iは++ ){ データ[I]は = sc.nextInt(); 結果[I] = データ[I]; } / ** *思想:データ配列からこれは、指定されたアイテムよりも小さい場合に最初のビューのそれぞれは、先頭から最初の項目は、追加、及びその後に進み、次の * / 用(INT I = 1; Iはdata.lengthを<; I ++は){ 以下のために(INT ; J <I、J = 0 J ++ ){ IF(DATA [J] <データは、[I])を[I]は= Math.max結果([I]結果[J]を結果+ DATA [I]) ; } } int型 ANS = -99; 用(int型温度:結果){ 場合(TEMP> ANS)ANS = TEMP。 } のSystem.out.println(ANS)。 } } }
私はあなたを助けることができることを願っています
それで全部です