HDU 1087スーパージャンプ!ジャンプ!ジャンプ!(ダイナミックプログラミング、最大の上昇とサブシーケンス)

スーパージャンプ!ジャンプ!ジャンプ!

制限時間:1000分の2000 MS(Javaの/その他)メモリの制限:32768分の65536 K(Javaの/その他)
の合計提出(S):59516受理提出(S):27708

 

問題の説明

 

今日では、「スーパージャンプと呼ばれるチェスのゲームの一種!ジャンプ!ジャンプは!」HDUで非常に人気があります。たぶん、あなたはいい子です、このゲームについて少し知っているので、私は今あなたにそれを紹介します。



ゲームは、二つ以上の2人のプレイヤーで再生することができます。それは、チェス盤(棋盘)といくつかの駒(棋子)で構成され、すべての駒は、正の整数または「開始」または「終了」でマークされています。プレイヤーは、始点から開始しなければならないが最終的にエンドポイントにジャンプします。ジャンプの過程で、プレイヤーはパスで駒を訪問しますが、誰もが必要では(あなたが開始する点は、最小で、エンドポイントが最大であると仮定することができます。)1 chessmanから別のものに絶対的に大きなジャンプします。そして、すべてのプレイヤーは後方に行くことができません。一つのジャンプは次の、また多くの駒を越えて行くことができますしchessmanから行くことができ、さらにはあなたがまっすぐに始点から終点までを得ることができます。もちろん、このような状況では、ゼロポイントを得ます。プレイヤーは、彼が彼のジャンプソリューションに応じて、より大きなスコアを取得することができます場合にのみ勝者です。
あなたの仕事は、与えられた駒のリストに従って出力する最大値です。

 


入力

 

入力は複数のテストケースが含まれています。各テストケースは、以下のように行に記載されている:
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

トピックの効果と分析

たびにあなたが数を与えるn個の代表サイズのピースの数、最初のスタートから各部分をn個に続いて、最後にジャンプし、大きなジャンプが前の曲に比べたびは、スキップするように依頼します質屋とどのくらいが最大であります

フェイスの質問は、実際には、需要とサブシーケンスで最大の増加、最長サブ上昇鋳型配列は十分にそれを変更し、そんなに書きます。

コード

#include <ビット/ STDC ++ H> 使用して名前空間STDを、INT [ 1005 ]、DP [ 1005 ]、I、N、LEN、ANSS、J。INT メイン()
{ 一方(scanf関数(" %のD "、&​​n)は、N!= 0 
    { 
        LEN = 0 
        ANSS = 0 ;
        (i = 0 ; iがn <; iは++ 
        { 
            CIN >> [I]。
            DP [I] = [i]は、
        } のための(I = 1

 




    
        ; iがn <; iは++ 
        {     
            ため(J = 0 ; J <I、J ++ 
            { 
                場合([I]> [J])
                { 
                    DP [I] = MAX(DP [I]、DP [J] + [I])。
                } 
            } 
        } 
        のために(i = 0 ; iがn <I ++は
        { 
            ANSS = MAX(ANSS、DP [I])。
        } 
        COUT << ANSS << ENDL。
        
    } 
}

 

 

おすすめ

転載: www.cnblogs.com/dyhaohaoxuexi/p/11392061.html