Submission #1139947

#TimeUsernameProblemLanguageResultExecution timeMemory
1139947hayaBank (IZhO14_bank)C++20
100 / 100
185 ms16716 KiB
#include <bits/stdc++.h> #define int long long #define ll long long #define ld long double #define ull unsigned long long #define endl '\n' #define NF string::npos #define all(v) v.begin(), v.end() #define allr(v) v.rbegin(), v.rend() #define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr) /*//! Arithmetic sequence law (n * (2*a + (n-1)*d))/2; n -> number of terms a -> first term d -> common difference */ using namespace std; const int N = 1e5 + 5; const int mod = 998244353; int dx[] = {1, -1, 0, 0}; int dy[] = {0, 0, 1, -1}; int n, m; vector <int> a, b; vector <pair <int, int> > dp(1<<20, {-1, -1}); pair <int, int> rec(int mask) { if(__builtin_popcount(mask) == m) return {0, 0}; pair <int, int> &ret = dp[mask]; if(~ret.first) return ret; ret = {0, 0}; for(int i = 0; i < m; i++) { if(mask & (1<<i)) continue; pair <int, int> p = rec(mask | (1<<i)); if(ret.first == n) continue; int idx = p.first, sum = p.second; if(idx == n) { ret = p; continue; } idx = p.first, sum = p.second + b[i]; if(sum == a[idx]) idx++, sum = 0; ret = max(ret, {idx, sum}); } return ret; } signed main() { FAST; cin >> n >> m; a.resize(n); b.resize(m); for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 0; i < m; i++) cin >> b[i]; pair <int, int> ans = rec(0); cout << (ans.first == n ? "YES" : "NO"); // cout << ans.first << " " << ans.second; 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...