제출 #100494

#제출 시각아이디문제언어결과실행 시간메모리
1004941Khan은행 (IZhO14_bank)C++14
71 / 100
10 ms412 KiB
/// 1n the name of GOD #include <bits/stdc++.h> using namespace std; #define ko exit(0); #define nl '\n' #define ios ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0); #define sz(s) (int)s.size() #define all(s) s.begin(), s.end() #define oll(s, n, c) (s) + (c), s + (n) + c #define pb push_back #define ff first #define ss second #define pii pair<int, int> typedef long long ll; typedef double db; const int N = 1e5 + 111; const int M = 1e9 + 7; int q, n, a[N], b[N]; void solve(int id){ if(id > n){ int w = 0; for(int i = 1; i <= q; ++i){ if(b[i]){ w++; return; } } if(!w){ cout << "YES"; exit(0); } return; } for(int i = 1; i <= q; ++i){ if(b[i] >= a[id]){ b[i] -= a[id]; solve(id + 1); b[i] += a[id]; } } solve(id + 1); } int can[N]; int main(){ cin >> q >> n; for(int i = 1; i <= q; ++i){ cin >> b[i]; } for(int i = 1; i <= n; ++i){ cin >> a[i]; } if(max(q, n) <= 10){ solve(1); cout << "NO"; return 0; } can[0] = 1; for(int i = 1; i <= n; ++i){ for(int j = 1111; j >= 0; --j){ if(can[j]){ can[j + a[i]] = 1; } } } for(int i = 1; i <= q; ++i){ if(!can[b[i]]){ cout << "NO"; return 0; } } cout << "YES"; 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...