Submission #713806

#TimeUsernameProblemLanguageResultExecution timeMemory
713806egregiousBank (IZhO14_bank)C++14
0 / 100
8 ms3668 KiB
#include <bits/stdc++.h> using namespace std; const int N = 20; int n, m, a[N], b[N], dp[(1 << N)], sum[(1 << N)]; vector<int> sums[1001]; // sums[i] -> all sets that sum to i // dp[s] -> max prefix a[0, i) that can be formed using the banknotes in set s 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 s = 0; s < (1 << m); s++) { sums[sum[s]].push_back(s); for (int j = 0; j < m; j++) { if (!(s & (1 << j))) sum[s | (1 << j)] = sum[s] + b[j]; } } dp[0] = 0; bool pos = false; for (int s = 0; s < (1 << m); s++) { if (dp[s] == n) { pos = true; break; } for (int k : sums[a[dp[s]]]) { if (k & s) continue; // intersect dp[k | s] = max(dp[k | s], dp[s] + 1); } } cout << (pos ? "YES" : "NO"); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...