| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1310080 | bluecat | 은행 (IZhO14_bank) | C++20 | 0 ms | 0 KiB |
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,fma")
#include "bits/stdc++.h"
using namespace std;
using ll = long long;
using ld = long double;
using ui = unsigned int;
using ul = unsigned long long;
using i128 = __int128;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using t3i = tuple<int, int, int>;
using t3l = tuple<ll, ll, ll>;
using vi = vector<int>;
using vl = vector<long long>;
using arr = array<int, 4>;
using node = pair<int, arr>;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
int n, q; cin >> n >> q;
vector<int> a(n), b(q);
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < q; i++) cin >> b[i];
vector<int> d(1<<q,-1), p(1<<q);
d[0] = 0;
for (int m = 0; m < (1<<q); m++)
for (int i = 0; i < q; i++) if ((m>>i)&1 && d[m^(1<<i)]!=-1)
{
if (p[m^(1<<i)]+b[i]==a[d[m^(1<<i)]]) d[m] = d[m^(1<<i)]+1, p[m] = 0;
else if (p[m^(1<<i)]+b[i]<a[d[m^(1<<i)]]) d[m] = d[m^(1<<i)], p[m] = p[m^(1<<i)]+b[i];
}
int res = 0;
for (int m = 0; m < (1<<q); m++) res |= d[m]==n;
cout << (res?"YES\n":"NO\n");
}
