トピックリンク:
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 }