标签:sid blog etc div ram map func mat xmlns
InputThe first line is a integer T(1≤T≤5)T(1≤T≤5), means T test cases.
For each test case :
The first line is NN, means the number of weights.
The second line are NN number, i‘th number wi(1≤wi≤100)wi(1≤wi≤100) means the i‘th weight‘s weight is wiwi.
The third line is a number MM. MM is the weight of the object being measured.OutputYou should output the "YES"or"NO".Sample Input
1 2 1 4 3 2 4 5
Sample Output
NO YES YES
Hint
For the Case 1:Put the 4 weight alone For the Case 2:Put the 4 weight and 1 weight on both side
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<sstream> #include<algorithm> #include<queue> #include<vector> #include<cmath> #include<map> #include<stack> #include<set> #include<memory> #include<bitset> #include<string> #include<functional> using namespace std; typedef long long LL; typedef unsigned long long ULL; #define MAXN 23 #define INF 0x3f3f3f3f /* 给你一个数字M +-x +-y 能否==M */ int a[MAXN], n, m; set<int> s; int main() { int T, tmp; scanf("%d", &T); while (T--) { s.clear(); scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); //int t1, t2; for (int i = 1; i <= n; i++) { set<int>::iterator e = s.end(); vector<int> t; for (set<int>::iterator it = s.begin(); it != s.end(); it++) { if (!s.count(*it + a[i])) t.push_back(*it + a[i]); if (!s.count(abs(*it - a[i]))) t.push_back(abs(*it - a[i])); } s.insert(a[i]); for (int i = 0; i < t.size(); i++) s.insert(t[i]); } scanf("%d", &m); while (m--) { scanf("%d", &tmp); if (s.count(tmp)) printf("YES\n"); else printf("NO\n"); } } }
标签:sid blog etc div ram map func mat xmlns
原文地址:http://www.cnblogs.com/joeylee97/p/7395475.html