Mおよび小規模(シンプルDP)

トピックリンク:

https://ac.nowcoder.com/acm/problem/13586

効果の件名:

小さなMは、アイテムの重量を知りたいのですが、彼だけバランス(カーソル)と石の山の前に、砂利は左側に配置することができ、右に置くことができます。彼は今、それぞれの石の重さを知っています。上記の条件Q、Qは、重量によって測定することができないことができます。

データ範囲:

データの複数のセット、数N、石の数の最初の行。(1 <= N <= 100)は、第2の行の次数Nは、石の重みを表します。(1 <=のWi <= 100)次に、3番目の列数Mは、問い合わせの数を表します。(1 <= M <= 1000)次に、M行の数各k(1 <= K <= 1E9)、チャレンジを表します。

具体的なアイデア: 

観測データの範囲は、kの範囲は、威圧的見出されます。この範囲は、Kが10,000以上であるとき、それは出力NOでなければならない問題である10000の最大の重量を量ることができます。他の例については、その上に暴力のサイクルのための2つ。

ACコード:

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間  STDを、
3位LL定義長い 長い
4位INF定義0x3f3f3f3f 
5  CONST  INT MAXN = 2E4 + 100 6  INTの DP [ 100 + 10 ] [MAXN]。
7  INT [MAXN]。
8  のint main()の
 9  {
 10      INT N。
11      一方(〜のscanf(" %d個"、&N))
 12      {
 13         以下のためにint型 i = 1 ; iが<= N; iが++ ){
 14          のscanf(" %dを"[I])。
15          }
 16          のmemset(DP、0はsizeof (DP))。
17          DP [ 0 ] [ 0 ] = 1 18          のためには、int型 i = 1 ; iがn = <; iは++ 19          {
 20              のためのint型 J = 0 ; J <= 1000 ; J ++ 21             {
 22                  であれば(DP [I- 1 ] [J])
 23                  {
 24                      DP [I] [J] = 1 25                      DP [I] [J + [I] = 1 26                      DP [I] [ABS(JA [I])] = 1 27                  }
 28              }
 29          }
 30          のint M。
31          のscanf(" %dの"、&M)。
32          一方(M-- 33          {
 34              INTTMP;
35              のscanf(" %dの"、およびTMP);
36              であれば(TMP <= 10000 && DP [n]は[TMP])
 37                  のprintf(" YES \ n " );
38              他の
39                  のprintf(" NO \ nを" );
40          }
 41      }
 42      リターン 0 43 }

 

おすすめ

転載: www.cnblogs.com/letlifestop/p/10955384.html