HDU 5616 枚举子集

来源:互联网 发布:淘宝直通车投放平台 编辑:程序博客网 时间:2024/06/06 03:57
#include <cstdio>#include <cstring>const int maxn = 100 + 10;int T, kase, n, m, k, inp[maxn], vis[maxn * maxn * 3];int main(int argc, char const *argv[]){scanf("%d", &T);while (T--){scanf("%d", &n); kase++;for (int i = 0; i < n; i++)scanf("%d", inp + i);for (int i = 0; i < (1 << n); i++){int cur = 0;for (int j = 0; j < n; j++)if (i & (1 << j)) cur += inp[j];vis[cur] = kase;for (int j = 0; j < n; j++)if (cur - inp[j] >= 0)vis[cur - inp[j]] = kase;}scanf("%d", &m);while (m--){scanf("%d", &k);printf("%s\n", (k < 0 || k > 3E4 || vis[k] != kase) ? "NO" : "YES");}}return 0;}


有一个没有游标的天平,和n个秤砣,m个询问, 每次一个k,问可否秤出k这个重量。 秤砣可以放两边。

0 0