Submission #1273236

#TimeUsernameProblemLanguageResultExecution timeMemory
1273236arkanefuryBank (IZhO14_bank)C++20
100 / 100
382 ms47080 KiB
#include <bits/stdc++.h> using namespace std; int N, M; vector<int> a, b; vector<vector<int>> candidates; unordered_map<int, bool> memo; bool dfs(int i, int used) { if (i == (int)a.size()) return true; long long key = ((long long)i << 20) | used; if (memo.count(key)) return memo[key]; for (int mask : candidates[i]) { if ((used & mask) == 0) { if (dfs(i + 1, used | mask)) return memo[key] = true; } } return memo[key] = false; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> N >> M; a.resize(N); b.resize(M); for (int i = 0; i < N; i++) cin >> a[i]; for (int j = 0; j < M; j++) cin >> b[j]; sort(a.rbegin(), a.rend()); vector<int> subsetSum(1 << M, 0); for (int mask = 1; mask < (1 << M); mask++) { int j = __builtin_ctz(mask); subsetSum[mask] = subsetSum[mask ^ (1 << j)] + b[j]; } candidates.resize(N); for (int i = 0; i < N; i++) { for (int mask = 1; mask < (1 << M); mask++) { if (subsetSum[mask] == a[i]) { candidates[i].push_back(mask); } } if (candidates[i].empty()) { cout << "NO\n"; return 0; } } cout << (dfs(0, 0) ? "YES\n" : "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...