제출 #330397

#제출 시각아이디문제언어결과실행 시간메모리
330397Vince729은행 (IZhO14_bank)C++11
71 / 100
1100 ms36972 KiB
#include<iostream> #include<cstdio> #include<string> #include<vector> #include<cstring> #include<algorithm> #include<set> #include<map> #include<complex> using namespace std; typedef long long ll; typedef complex<double> pt; #define x() real() #define y() imag() #define smx(a, b) a = max(a, b) #define smn(a, b) a = min(a, b) #define in(mp, v) mp.find(v) != mp.end() const int MAXN = 20; const int MOD = 1000000007; int n, m, a[MAXN+1], b[MAXN]; set<int> work[MAXN+1]; vector<int> combs[MAXN+1]; int sum(int x) { int ret = 0, i = 0; for (; x; i++, x>>=1) ret += b[i]*(x&1); return ret; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for (int i = 1; i <= n; i++) cin >> a[i]; for (int j = 0; j < m; j++) cin >> b[j]; for (int k = 0; k < (1<<m); k++) { int sm = sum(k); for (int i = 1; i <= n; i++) { if (sm == a[i]) { combs[i].push_back(k); } } } work[0].insert(0); for (int i = 1; i <= n; i++) { for (int v : work[i-1]) { for (int c : combs[i]) { if ((v & c) == 0) { work[i].insert(v | c); } } } } if (work[n].size() > 0) { cout << "YES" << endl; } else cout << "NO" << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...