// #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");
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |