Submission #1275127

#TimeUsernameProblemLanguageResultExecution timeMemory
1275127almazBank (IZhO14_bank)C++17
100 / 100
336 ms17244 KiB
#include <bits/stdc++.h> using namespace std; #define int long long void solve() { int n, m; cin >> n >> m; vector<int> a(n), b(m); for (int &x : a) cin >> x; for (int &x : b) cin >> x; // все подмножества b vector<vector<int>> by_sum(1000 * 20 + 5); // макс сумма = 20000 for (int mask = 1; mask < (1 << m); mask++) { int sum = 0; for (int j = 0; j < m; j++) if (mask & (1 << j)) sum += b[j]; if (sum < (int)by_sum.size()) by_sum[sum].push_back(mask); } // dp: какие маски b уже использованы vector<char> dp(1 << m, 0), nxt(1 << m, 0); dp[0] = 1; // изначально пустое множество for (int need : a) { fill(nxt.begin(), nxt.end(), 0); for (int used = 0; used < (1 << m); used++) { if (!dp[used]) continue; for (int mask : by_sum[need]) { if ((used & mask) == 0) { nxt[used | mask] = 1; } } } dp.swap(nxt); } bool ok = false; for (int x : dp) if (x) { ok = true; break; } cout << (ok ? "YES\n" : "NO\n"); } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...