トピックポータル
問題解決のアイデア:
バックパックのパケットコードが注釈付き。
ACコード:
1の#include <iostreamの> 2の#include <cstdioを> 3の#include < 設定 > 4 5 使用 名前空間STD。 6 7 INTの N、M、Cの[ 1001 [W]、1001 ]、F [ 1001 ]、Z [ 1001 ]、p個の[ 1001 ]、S [ 1001 ] [ 1001 ]。 8 9 INT メイン(){ 10 のscanf(" %d個の%のD "、&M、&N) 11 のためには、(int型 i = 1 ; iが<= N; I ++){ 12 のscanf(" %D%D%D "、&C [i]は、&W [i]は、&Z [I])。 13 P [Z [i]は] ++ ; 14の S [Z [i]は] [P [Z [I]]] = I。 15 } 16 F [ 0 ] = 0 。 17 のために(INT O = 1 <; = N O ++ O)// 组数 18 のために(INT J = M; J => 1 ; j--)// 背包容量 19 のために(INT I = P [O] ; I> = 1 ; i--)//すべての記事の現在のセット 20は、 IF(J> = C [S [O] [I]) 21は、 F [J] = MAX(F [J]、F [JC [S [O] [I]]] + [W S [O] [I]); 22である のprintf(" %のD " ;、F [M]) 23が 戻り 0 ; 24 }