제출 #1265061

#제출 시각아이디문제언어결과실행 시간메모리
1265061nguyenhuuphuc52Bank (IZhO14_bank)C++20
100 / 100
126 ms8648 KiB
#include <iostream> #define fi first #define se second using namespace std; using ll = long long; const int mod = 1e9 + 7; const int maxn = 21; int n, m; int a[maxn], b[maxn]; pair <int, int> dp[10000007]; int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> m; for (int i = 1; i <= n; i++) cin >> a[i]; for (int j = 1; j <= m; j++) cin >> b[j]; for (int mask = 1; mask < (1 << m); mask++) { for (int i = 1; i <= m; i++) if ((mask >> (i - 1)) & 1) { int prevmask = mask ^ (1 << (i - 1)); int sn = dp[prevmask].fi, sodu = dp[prevmask].se; if (sodu + b[i] < a[sn + 1]) { dp[mask] = max (dp[mask], {sn, sodu + b[i]}); } else if (sodu + b[i] == a[sn + 1]) { dp[mask] = max (dp[mask], {sn + 1, 0}); } } } //cout << dp[0].fi << " " << dp[0].se << "\n"; //cout << dp[(1 << (m - 1)) - 1].fi << " " << dp[(1 << (m - 1)) - 1].se << "\n"; //if (dp[(1 << (m - 1)) - 1].fi == n) cout << "YES"; //else cout << "NO"; bool ok = false; for (int mask = 0; mask < (1 << m); mask++) if (dp[mask].fi == n) { cout << "YES"; ok = true; break; } if (!ok) cout << "NO"; return 0; } // AC
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...