Submission #802950

#TimeUsernameProblemLanguageResultExecution timeMemory
802950VMaksimoski008Bank (IZhO14_bank)C++14
100 / 100
115 ms16772 KiB
#include <bits/stdc++.h> #define pb push_back #define eb emplace_back #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define uniq(x) x.erase(unique(all(x)), x.end()) #define rall(x) x.rbegin(), x.rend() #define each(x, v) for(auto &x : v) #define mp make_pair using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using str = string; using pii = pair<int, int>; using pll = pair<ll, ll>; const int mod = 1e9 + 7; const int LOG = 20; const int maxn = 1e5 + 5; void setIO() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); } int32_t main() { setIO(); int n, m; cin >> n >> m; vector<int> need(n), money(m); for(int &x : need) cin >> x; for(int &x : money) cin >> x; vector<ll> done(1<<m, -1); vector<ll> left(1<<m, -1); done[0] = 0, left[0] = 0; for(int s=1; s<(1<<m); s++) { for(int i=0; i<m; i++) { if((s & (1 << i)) && done[s^(1<<i)] >= 0) { int total = left[s^(1<<i)] + money[i]; int want = need[done[s^(1<<i)]]; if(total == want) { done[s] = 1 + done[s^(1<<i)]; left[s] = 0; } else if(total < want) { done[s] = done[s^(1<<i)]; left[s] = total; } } } } // for(int s=0; s<(1<<m); s++) { // string x = bitset<6>(s).to_string(); // reverse(all(x)); // cout << x << ": "; // cout << done[s] << " " << left[s] << '\n'; // } for(int s=1; s<(1<<m); s++) { if(done[s] == n) { cout << "YES\n"; return 0; } } 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...