2755:ポケットのマジック(再帰、動的プログラミング)

 

合計時間制限: 
10000ms
 
メモリ制限: 
65536kB
説明
魔法のポケットがあり、総容量は、この記事のポケットのいくつかのバリエーションで、40だった、これらの項目の合計量は40でなければなりません。ジョンは今あるn個のアイテムを得ることが、各アイテムの体積は、A 1 、A 2 ...... A N 物体40の総体積が選択されている場合、ジョンは、次いで、これらのアイテムを得ることができる魔法のポケット、ジョンを使用して、これらの項目の一部から選択することができます。質問は今、項目を選択するジョンどのように多くの異なる方法です。
エントリー
第一の入力線は正の整数N(1 <= N <=である 20)、 異なるアイテムの数を示します。次のn行は、各行が1と40の間の正の整数であり、Aが与えられる 。1 A、 2 ...... A N 値。
輸出
出力選択モードの異なるアイテムの数。
サンプル入力
3 
20 
20 
20
サンプル出力
3
1  // 方法:再帰アイテムとアイテム・ボリューム数nの配列A [100]グローバル変数に、
 2  // COUNT(I、SUM)が統計に、i番目のアレイバックの開始からの組み合わせの数を表し、そして種類の数の和、
 3。 // 和と番号の組み合わせは次のとおりCOUT(I、合計)= COUT(I + 1、和[I])+ COUT(I + 1、合計)、
 4。 // COUT(I + 1、sum-前記 [I])を表し、[i]は、次のカウント数最初のi + 1から、であること含ま
 5  // 和の数および組み合わせ[I]であります型番、およびCOUT(I + 1、和)[i]は、であり、数字の数からI + 1以降の統計的組み合わせの種類の数********和を含まない示し*************************** 
6。の#include <入出力ストリームを>
 7。 使用した 名前空間STD;
 8  
。9  int型 A [ 100 ];
 10  int型 N- = 。1 ;
 11  int型 COUNT(INT I、INT 和){
 12は、     IF(和== 0 ){
 13は         リターン 1 ;    // 和と番号の組み合わせのセットを見つける; 
14      }
 15を     IF(I == N-和|| < 0を返す 0// I ==命令の他のn個が組み合わされていない、合計<0を組み合わせないことを示し、
16      リターン COUNT(I + 1、-SUM [I])+ COUNT(I + 1、SUM); // 配列から私は、最初にA [i]とを含む、開始されて含まれていません; 
17  }
 18である 
19。 INT メイン(){
 20は     、一方(CIN >> N-){
 21です         以下のためにINT iが= 0 ; I <N; I ++ 22              CIN >> [I]。
23          COUT <<カウント(040)<< ENDL。
24      }
 25      リターン 0 26 }
1  // 方法2:動的プログラミング
2の#include <入出力ストリーム>
 。3  使用して 名前空間STD;
 4  の#define N 100
 。5  INT N-、A [N];
 6  int型のmain(){
 7      一方(CIN >> N-){
 8          INT(DP *)[ 50 ] = 新しい新しい INT [N] [ 50 ]; // DP [I] [J]はフロントボリュームCouchu Jのi番目の項目を示し、
図9          のためのINT iは= 1。 ; I <= N; ++ I ){
 10              CIN >> A [I];
 11              DP [I] [0 ] = 1 ; // 初始边界
12          }
 13          DP [ 0 ] [ 0 ] = 1 ;
14          のためにINT iは= 1 ; iが<= N; I ++ 15              のためのINT J = 1 ; J <= 40 ; J ++ ){
 16                  、DP [I] [J] = DP [I- 1 ] [J]。
17                  であれば([I] <= J)
 18                      DP [I] [J] + = DP [I- 1 ] [J- A [I]]。
19              }
20          COUT << DP [n]が[ 40 ] << ENDL。
21          削除[] DP。
22      }
 23      リターン 0 24 }

 

おすすめ

転載: www.cnblogs.com/aiqinger/p/12599557.html