#7733. 数字拼和

数字拼和

题目描述

给定 nn 个正整数,每个数最多只能使用一次。接下来有 qq 次询问,每次给出一个整数 ss,询问是否可以从这 nn 个数中选出若干个,使它们的和恰好等于 ss

这是一道 bitset 的经典入门应用。设 f[i] = 1 表示和为 ii 可以被拼出来。加入一个数字 xx 时,原来所有可以拼出的和都可以再加上 xx,因此可以写成:

f |= (f << x);

输入格式

第一行两个整数 n,qn,q

第二行 nn 个正整数 aia_i

接下来 qq 行,每行一个整数 ss

输出格式

对于每次询问,如果可以拼出和 ss,输出 Yes,否则输出 No

样例

4 5
2 3 7 10
5
9
12
1
22
Yes
Yes
Yes
No
Yes

数据范围与提示

  • 对于 100%100\% 的数据,1n10001 \le n \le 10001ai10001 \le a_i \le 10001s1000001 \le s \le 1000001q1000001 \le q \le 100000
  • 提示:令 bitset<100001> f; f[0] = 1;,然后依次处理每个数字。