ダイナミック企画入門(2):01ナップザック問題

_____________________________________________________良いコード不滅!

トピック:

 

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------------------

タイトルは、別の言った:N項目のVとバックパックの容量があります。最初のスペースを消費項目にI C [i]は、得られた値は、W [i]があります。和の最大値を可能にするバックパックにアイテムを解きます。

基本的な考え方:

各アイテムは一つだけで、あなたが選択するか、省略することができます。これは、によって特徴付けられる最も基本的なナップザック問題、です。

定義されたステータスのサブ問題:ちょうど利用できる最大容量値vバックパックに配置された私の項目の前に示しています。状態遷移方程式は、次のとおり

関連するすべての質問はそれから派生していると、状態遷移方程式は、基本的にはバックパックを非常に重要な方程式です。

擬似コードは次のよう:

F [0,0 ... V] = 0 
からN I = 1 
    Vため= C [i]はVに
        F [I、V] =最大{F [I-1、V]、F [I-1 、VC [i]は+ W [I]}
            

 

_______________________________________________________________________________________________________________________________________

質問に向ける見て:...

あなたが満たされたバックパックの後に最大の価値を行うので、あなたのバックパックやアイテムの合計数、および項目の値とボリュームを与えるために、01バックパックのほとんど裸

 

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、

CONSTの INT N = 1E3 + 10 INT W [N]、V [N]、DP [N]。
INT のmain()
{ 
    int型 T; CIN >> T。
    一方、(T-- ){ 
    memsetの(DP、0はsizeof (DP))。
    int型 N、V; cinを>> N >> V;
    int型 i = 1 ; iが<= N; I ++)は、CIN >> V [i]は、
    以下のためにint型 I = 1、N = iは<; iは++)CINを>> W [i]は、
    以下のためのint型I = 1 ; <; I ++は= N iが
    { 
        ためINT J = V; J> = W [i]が; j-- ){ 
            DP [J] = MAX(DP [J]、DP [JW [I] ] + V [I])。
        } 
    } 
    COUT << DP [V] << ENDL。
    } 
    戻り 0 
}

 

 

 

チョッパーは試すことができます。https://blog.csdn.net/nobleman__/article/details/78128318

参考:

「ナップザック問題9つのストレス」

________________________________________________________千の波の上に、あなたは心にあります。

 

おすすめ

転載: www.cnblogs.com/dragondragon/p/11275514.html