제출 #768090

#제출 시각아이디문제언어결과실행 시간메모리
768090raysh07은행 (IZhO14_bank)C++17
100 / 100
642 ms103284 KiB
#include <bits/stdc++.h> using namespace std; //#define int long long #define INF (int)1e18 mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count()); void Solve() { int n, m; cin >> n >> m; vector <int> a(n), b(m); for (auto &x : a) cin >> x; for (auto &x : b) cin >> x; vector <int> adj[1 << m]; for (int i = 0; i < (1 << m); i++){ for (int j = 0; j < m; j++){ if (i >> j & 1) adj[i].push_back(j); } // cout << i << "\n"; // for (int j : adj[i]){ // cout << j << " "; // } // cout << "\n"; } // return; int s1 = 0; vector <int> s(1 << m, 0); for (int i = 1; i < (1 << m); i++){ for (int j = 0; j < m; j++){ if (i >> j & 1) s[i] += b[j]; } } vector <bool> can(1 << m, false); can[0] = true; for (auto x : a){ s1 += x; vector <bool> nc(1 << m, false); for (int i = 0; i < (1 << m); i++){ nc[i] = can[i]; for (int j : adj[i]){ { int mask = i ^ (1 << j); if (nc[mask] && s[mask] >= s1 - x && s[i] <= s1){ nc[i] = true; } } } if (nc[i] && s[i] == s1) can[i] = true; else can[i] = false; } } for (auto x : can) if (x == true){ cout << "YES\n"; return; } cout << "NO\n"; } int32_t main() { auto begin = std::chrono::high_resolution_clock::now(); ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; // cin >> t; for(int i = 1; i <= t; i++) { //cout << "Case #" << i << ": "; Solve(); } auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin); cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\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...