Submission #171733

#TimeUsernameProblemLanguageResultExecution timeMemory
171733davitmargBank (IZhO14_bank)C++17
71 / 100
1079 ms28280 KiB
/*DavitMarg*/ #include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #include <map> #include <unordered_map> #include <set> #include <queue> #include <iomanip> #include <bitset> #include <stack> #include <cassert> #include <iterator> #include <fstream> #define mod 1000000007ll #define LL long long #define LD long double #define MP make_pair #define PB push_back #define all(v) v.begin(), v.end() using namespace std; const int N = 25; int n, m, dp[N * 4][(1 << 20) + 5]; LL a[N], b[N], sum[(1 << 20) + 5]; void solve(int v, int l, int r) { if (l == r) { for (int mask = 0; mask < (1 << m); mask++) if (sum[mask] == a[l]) dp[v][mask] = 1; return; } int mid = (l + r) / 2; solve(v * 2, l, mid); solve(v * 2 + 1, mid + 1, r); for (int mask = 0; mask < (1 << m); mask++) { if (dp[v * 2][mask] == 0) continue; int s = (1 << m) - 1 - mask; while (s > 0) { //cout << mask << " : " << s << endl; if (dp[v * 2 + 1][s]) dp[v][mask | s] = 1; s = (s - 1) & ((1 << m) - 1 - mask); } } } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= m; i++) cin >> b[i]; for (int mask = 0; mask < (1 << m); mask++) { for (int i = 0; i < m; i++) if (((1 << i) & mask)) sum[mask] += b[i + 1]; //cout << mask << " = " << sum[mask] << endl; } solve(1, 1, n); int ans = 0; for (int mask = 0; mask < (1 << m); mask++) ans += dp[1][mask]; if (ans) cout << "YES" << endl; else cout << "NO" << endl; return 0; } /* 2 4 9 10 5 4 5 5 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...