_____________________________________________________良いコード不滅!
トピック:
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------------------
タイトルは、別の言った: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つのストレス」
________________________________________________________千の波の上に、あなたは心にあります。