Submission #519510

#TimeUsernameProblemLanguageResultExecution timeMemory
519510danikoynovBank (IZhO14_bank)C++14
71 / 100
1010 ms5144 KiB
#include<bits/stdc++.h> using namespace std; const int maxn = 20; int n, m, a[maxn], b[maxn], dp[maxn][(1 << maxn)]; vector < int > g[maxn]; void solve() { cin >> n >> m; for (int i = 1; i <= n; i ++) cin >> a[i]; for (int i = 0; i < m; i ++) cin >> b[i]; for (int mask = 0; mask < (1 << m); mask ++) { int sum = 0; for (int bit = 0; bit < m; bit ++) if ((mask & (1 << bit)) > 0) sum = sum + b[bit]; for (int i = 1; i <= n; i ++) if (a[i] == sum) g[i].push_back(mask); } if (n == 1 && g[1].size() > 0) { cout << "YES" << endl; return; } for (int mask : g[1]) dp[1][mask] = 1; for (int i = 2; i <= n; i ++) { for (int mask = 1; mask < (1 << m); mask ++) { for (int sub_mask : g[i]) { if ((mask & sub_mask) != sub_mask) continue; if (dp[i - 1][(mask ^ sub_mask)] == 1) dp[i][mask] = 1; if (i == n && dp[i][mask] == 1) { cout << "YES" << endl; return; } } } } cout << "NO" << endl; } int main() { 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...