Submission #1218980

#TimeUsernameProblemLanguageResultExecution timeMemory
1218980karen671Bank (IZhO14_bank)C++20
19 / 100
1095 ms8520 KiB
#include <algorithm> #include <iostream> #include <random> #include <stack> #include <string> #include <vector> using namespace std; typedef int ll; int main() { size_t n, m; std::cin >> n >> m; std::vector<int> a, b; a.resize(n); b.resize(m); for (size_t i = 0; i < n; ++i) { cin >> a[i]; } for (size_t i = 0; i < m; ++i) { cin >> b[i]; } std::vector<std::vector<int>> dm(n, std::vector<int>(1 << m, false)); for (size_t i = 0; i < n; ++i) { for (size_t mask = 0; mask < (1 << m); ++mask) { int sum = 0; if (i == 0) { for (size_t j = 0; j < m; ++j) { if (mask & (1 << j)) { sum += b[j]; } } if (sum == a[i]) { dm[i][mask] = true; } } else [[likely]] { for (size_t mask2 = 0; mask2 < (1 << m); ++mask2) { if (dm[i - 1][mask2] && (mask2 & (~mask)) == 0) { for (size_t j = 0; j < m; ++j) { if ((mask & (1 << j)) && !(mask2 & (1 << j))) { sum += b[j]; } } } if (sum == a[i]) { dm[i][mask] = true; break; } } } } } if (std::count(dm.back().begin(), dm.back().end(), true) == 0) { std::cout << "NO"; } else { std::cout << "YES"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...