Submission #171725

#TimeUsernameProblemLanguageResultExecution timeMemory
171725davitmargBank (IZhO14_bank)C++17
19 / 100
94 ms12500 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][(1 << 20) + 5]; LL a[N], b[N], sum[(1 << 20) + 5]; 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]; dp[0][0] = 1; for (int i = 1; i <= n; i++) { for (int mask = 0; mask < (1 << m); mask++) { if (dp[i - 1][mask] == 0) continue; int s = (1 << m) - 1 - mask; while (s > 0) { if (sum[s] == a[i]) dp[i][mask | s] = 1; s = (s - 1) & ((1 << m) - 1 - mask); } } } int ans = 0; for (int mask = 0; mask < (1 << m); mask++) ans += dp[n][mask]; if (ans) cout << "YES" << endl; else cout << "NO" << endl; 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...