Submission #1288561

#TimeUsernameProblemLanguageResultExecution timeMemory
1288561muhammad-ahmadBank (IZhO14_bank)C++20
100 / 100
123 ms16864 KiB
// #include <bits/stdc++.h> #include <iostream> #include <cmath> #include <algorithm> #include <map> #include <vector> #include <iomanip> #include <string> #include <queue> #include <set> #include <deque> #include <numeric> #include <stack> #include <chrono> using namespace std; #define int long long #define endl '\n' #define all(v) (v).begin(), (v).end() #define rall(v) (v).rbegin(), (v).rend() #define fi first #define Se second void fast_io() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cout << fixed << setprecision(9); } void solve() { int n, m; cin >> n >> m; int a[n] = {}; int b[m] = {}; for (auto &i : a) cin >> i; for (auto &i : b) cin >> i; int MASK = (1LL << m); vector<int> dp1(MASK, -1), dp2(MASK, -1); dp1[0] = dp2[0] = 0; for (int mask = 0; mask < MASK; mask++){ for (int last = 0; last < m; last++){ if (mask & (1LL << last) == 0) continue; int prev = mask ^ (1LL << last); if (dp1[prev] == -1) continue; int pans = dp1[prev]; int sum = dp2[prev] + b[last]; if (sum < a[pans]){ dp1[mask] = pans; dp2[mask] = sum; } else if (sum == a[pans]){ dp1[mask] = pans + 1; dp2[mask] = 0; } } if (dp1[mask] == n){ cout << "YES" << endl; return; } } cout << "NO" << endl; return; } signed main() { fast_io(); srand(chrono::steady_clock::now().time_since_epoch().count()); int tc = 1; // cin >> tc; while (tc--) solve(); 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...