Submission #1164495

#TimeUsernameProblemLanguageResultExecution timeMemory
1164495s3yoonparkBank (IZhO14_bank)C++20
71 / 100
1092 ms7772 KiB
#include <bits/stdc++.h> #define ssize(x) (int)x.size() using namespace std; const int N = 20; int n, m; int a[N], b[N]; bool dp[N][1 << N]; vector<int> config[1001]; void solve() { 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 i = 0; i < (1 << m); i++) { int sum = 0; for (int j = 0; j < m; j++) { if ((1 << j) & i) { sum += b[j + 1]; } } config[sum].push_back(i); } dp[0][0] = true; for (int i = 1; i <= n; i++) { int e = a[i]; for (int j = 0; j < (1 << m); j++) { if (!dp[i - 1][j]) continue; for (int c : config[e]) { bool works = true; for (int k = 0; k < m; k++) { bool inj = (1 << k) & j; bool inc = (1 << k) & c; if (inc && inj) works = false; } if (works) { dp[i][j | c] = dp[i - 1][j]; } } } } int ans = 0; for (int i = 0; i < (1 << m); i++) { ans |= dp[n][i]; } cout << (ans ? "YES\n" : "NO\n"); } int main() { // freopen("bank.in", "r", stdin); // freopen("bank.out", "w", stdout); 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...