제출 #499088

#제출 시각아이디문제언어결과실행 시간메모리
499088boykut은행 (IZhO14_bank)C++14
19 / 100
63 ms332 KiB
#include <bits/stdc++.h> using namespace std; int a[22], b[22]; int main() { ios::sync_with_stdio(0); cin.tie(0); srand(time(NULL)); int n, m; cin >> n >> m; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < m; i++) cin >> b[i]; if (n == 1) { for (int mask = 0; mask < (1 << m); mask++) { int ans = 0; for (int i = 0; i < m; i++) if (mask & (1 << i)) ans += b[i]; if (ans == a[0]) return cout << "YES\n", 0; } cout << "NO\n"; return 0; } if (m <= 10) { vector<int> s(1 << m, 0); for (int mask = 0; mask < (1 << m); mask++) { for (int i = 0; i < m; i++) if (mask & (1 << i)) s[mask] += b[i]; } vector<vector<int>> dp(n + 1, vector<int> (1 << m)); dp[0] = vector<int> (1 << m, 1); for (int i = 0; i < n; i++) { for (int mask = 0; mask < (1 << m); mask++) { if (s[mask] != a[i]) continue; for (int prev = 0; prev < (1 << m); prev++) { if ((prev & mask) != 0) continue; if (dp[i][prev] == 1) dp[i + 1][mask] = 1; } } } int ok = 0; for (int mask = 0; mask < (1 << m); mask++) if (dp[n][mask]) ok = 1; if (ok == 1) cout << "YES\n"; else cout << "NO\n"; return 0; } 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...