トピックポータル
問題解決のアイデア:
実際には、この問題は、01バックパックに見ることができる、すべての項目は、これらの値を識別し、すべてのプログラムの数が正確にバックパックに特定項目の値に等しい特定のアイテムのすべての可能な値で構成することができ、それは01バックパックを実行しました。
ACコード:
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <アルゴリズム> 4の#include <CStringの> 5 6 使用して 名前空間STDを、 7 8 int型、T、N、[ 31 ]、F [ 1001 ]、ANS、合計。 9 BOOL VIS [ 31 ]。 10 11 INT メイン(){ 12 のscanf(" %dの"、&T)。 13 のために(INT iは= 1 ; iが<= T; I ++ ){ 14 scanf関数(" %のD "、&N) 15 のmemset(0、はsizeof (a)参照)。 16 のmemset(F、0、はsizeof (F))。 17の ANS = 0 。 18 のために(INT J = 1 ; J <= nであり、j ++ ){ 19 のscanf(" %dの"、&[J])。 20 和= MAX(和、[J])。 21 } 22 F [ 0 ] = 1; 23 ソート(+ 1、+ N + 1 )。 24 のために(INT J = 1 ; J <= N; J ++ ) 25 のための(INT K =和; K> = [J]; k-- ) 26 F [K] + = F [K- A [J] ]; 27 のために(INT J = 1 ; J <= N; J ++ ) 28の ANS + = F [J]。 29 のprintfは(" %D \ n "、ANS - N)。 30 } 31 リターン 0; 32 }