제출 #1146959

#제출 시각아이디문제언어결과실행 시간메모리
1146959bullfinch은행 (IZhO14_bank)C++20
100 / 100
91 ms16712 KiB
#include <bits/stdc++.h> #include <random> #include <chrono> #define int long long // #define pb push_back #define endl '\n' const int MOD = 1e9 + 7; constexpr int N = 3e5 + 1; const int inf = 1e15; using namespace std; void solve() { int n, m; cin >> n >> m; vector<int> a(n); vector<int> b(m); for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < m; i++) cin >> b[i]; int mx = (1 << m); vector<int> dp(mx, -inf); vector<int> dp1(mx, inf); dp[0] = 0; dp1[0] = 0; for (int mask = 0; mask < mx; mask++) { int i = dp[mask]; int y = dp1[mask]; if (i == n) { cout << "YES" << endl; return; } for (int j = 0; j < m; j++) { int x = (1 << j); if ((x & mask) != 0) continue; if (y + b[j] == a[i]) { dp[(mask | x)] = dp[mask] + 1; dp1[(mask | x)] = 0; } else { dp[(mask | x)] = max(dp[(mask|x)], dp[mask]); dp1[(mask | x)] = min(dp1[(mask|x)], y+b[j]); } } } cout << "NO" << endl; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); int z = 1; // cin >> z; while (z--) { solve(); cerr << "-----" << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...