Submission #340083

#TimeUsernameProblemLanguageResultExecution timeMemory
340083_aniBank (IZhO14_bank)C++17
71 / 100
1052 ms54636 KiB
#include <iostream> #include <algorithm> #include <vector> #include <set> using namespace std; vector<int> dp[22]; set <int> sums[20'002]; int a[22], b[22]; int n, m; int used[22][(1 << 20) + 1]; int getsum(int mask) { int res = 0; int ind = m - 1; while (mask) { if (mask & 1) res += b[ind]; mask >>= 1; ind--; } return res; } int main() { cin >> n >> m; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < m; i++) cin >> b[i]; for (int i = 1; i < (1 << m); i++) sums[getsum(i)].insert(i); for (auto s : sums[a[0]]) used[0][s] = 1; for (auto i : sums[a[0]]) dp[0].push_back(i); for (int i = 1; i < n; i++) { if (dp[i - 1].empty()) { cout << "NO\n"; return 0; } for (int j = 0; j < (int)dp[i - 1].size(); j++) for (auto k: sums[a[i]]) if ((dp[i - 1][j] & k) == 0 && used[i][dp[i - 1][j] | k] == 0) { dp[i].push_back(dp[i - 1][j] | k); used[i][dp[i - 1][j] | k] = 1; } } if (dp[n - 1].empty()) cout << "NO\n"; else cout << "YES\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...