제출 #1308579

#제출 시각아이디문제언어결과실행 시간메모리
1308579buzdiBank (IZhO14_bank)C++17
100 / 100
268 ms16984 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int NMAX = 20; const int VMAX = 1000; int n, m, maxi; int a[NMAX + 1], b[NMAX + 1]; vector<int> v[VMAX + 1]; queue<pair<int, int>> q; bool visited[NMAX + 1][1 << NMAX]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i = 1; i <= n; i++) { cin >> a[i]; } for(int i = 1; i <= m; i++) { cin >> b[i]; } maxi = *max_element(a + 1, a + n + 1); for(int mask = 1; mask < (1 << m); mask++) { int sum = 0; for(int i = 1; i <= m; i++) { if(mask >> (i - 1) & 1) { sum += b[i]; } } if(sum <= maxi) { v[sum].push_back(mask); } } q.push({0, (1 << m) - 1}); visited[0][(1 << m) - 1] = 1; while(!q.empty()) { auto [i, mask] = q.front(); q.pop(); for(int x : v[a[i + 1]]) { if((mask & x) == x && !visited[i + 1][mask ^ x]) { if(i + 1 == n) { cout << "YES\n"; return 0; } visited[i + 1][mask ^ x] = 1; q.push({i + 1, mask ^ x}); } } } cout << "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...