データ構造とアルゴリズム:動的計画

古典的な01ナップザック問題:いくつかの項目を考えると、各項目の値が別の種類ではなく、同じ量を有し、最大値を求めるにはバックパックWの重量に耐えることができますが、おそらくそう(項目を保持することができます記述)

同様のトピック:  https://www.luogu.org/problem/P1048  おそらく意味:谷を、いくつかのハーブがあり、それぞれ1のハーブの値が異なっている、いない同じ買収が与えられた時間を収集することができるようにしようと、時間がかかりますハーブの最大値

Javaのソリューション:

    パブリック 静的 ボイドメイン(文字列[]引数){ 
        整数Mは = 3 ;   // ハーブ総数 
        整数T = 70 ; // 総使用時間

        整数結果 = 0 ; // 合計最終値

        // 次の二つのアレイなぜなら、初期化この行は、0でなければならない
        intは [] = V 新しい新規 のint [] { 010012 }; // ハーブ値
        INT [] = W 新しい新しい intは、[] { 071であり691 ;} // 所要時間

        // このハーブのI、jは、残っている現在の時刻である
         // の状態[I] [J] =州[J-1]〜[J]:取られていない場合
         @ とら場合:状態[I] [J] =状態[I-1] [JW [I] + V [I] 

        INT [] []状態= 新しい新しい INT [Mの+ 1。 [Tの+] 1。;] 

        のためのint型私は= 1 ; I <= M、Iが++ ){
             ためINT J = 0 ; J <= T; J ++ ){
                 IF(Jは> = W [I]){ // 現在時刻十分取得Zhekeハーブを収集取らかどう間収集します大きな値その
                    状態[I] [J] =状態[I- 1 ] [J]>状態[I- 1 ] [JW [I] + V [i]は?状態[I- 1 ] [J]:状態[I- 1 ] [JW [I] + V [i]は、
                }  { // 否则不采 
                    状態[I] [J] =状態[I- 1 ] [J]。
                } 
                であれば(状態[I] [J]> 結果){ 
                    結果 = 状態[I] [J]。
                } 
            } 
        } 
        システム。アウト .println(" 最大价值:" + 結果)。
    }

性能およびバックパック動的プログラミングまたは重量は、この数は、動的プログラミングの性能大きすぎると、の関係を有することができ、全時間Tのうち、この主題であるが、大きく減少します

おすすめ

転載: www.cnblogs.com/cccy0/p/11586283.html