Submission #1325946

#TimeUsernameProblemLanguageResultExecution timeMemory
1325946marcus06Bank (IZhO14_bank)C++20
100 / 100
342 ms58856 KiB
#include <bits/stdc++.h> using namespace std; using lli = long long; int f[21][1 << 20]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; vector <int> a(n); for (int i = 0; i < n; ++i) cin >> a[i]; vector <int> b(m); for (int i = 0; i < m; ++i) cin >> b[i]; vector <int> total(1 << m); for (int mask = 0; mask < (1 << m); ++mask) { for (int i = 0; i < m; ++i) { if ((mask >> i) & 1) total[mask] += b[i]; } } vector <vector <int>> good_mask(n); for (int i = 0; i < n; ++i) { for (int mask = 0; mask < (1 << m); ++mask) { if (total[mask] == a[i]) good_mask[i].emplace_back(mask); } } int full_mask = (1 << m) - 1; f[0][0] = 1; for (int i = 0; i < n; ++i) { for (int mask = 0; mask < (1 << m); ++mask) { if (f[i][mask] == 0) continue; for (auto x: good_mask[i]) { if ((x & mask) == 0) f[i + 1][mask | x] |= f[i][mask]; } } } int possible = 0; for (int mask = 0; mask < (1 << m); ++mask) possible |= f[n][mask]; cout << (possible ? "YES" : "NO") << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...