// source problem :
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin(), x.end()
#define lb lower_bound
#define ub upper_bound
#define MASK(i) (1LL << (i))
void ckmax(int& f, int s)
{
f = (f > s ? f : s);
}
void ckmin(int& f, int s)
{
f = (f < s ? f : s);
}
int a[21], b[20], n, m;
void solve(int p, int sum, int mask, int st, int used)
{
if (p == n)
{
cout << "YES";
exit(0);
}
if (sum > 0)
{
for (int i = st; i < m; i++)
{
if ((mask >> i) & 1)
{
if (b[i] <= sum && m - used >= n - p)
{
solve(p, sum - b[i], mask ^ MASK(i), i + 1, used + 1);
}
}
}
}
else solve(p + 1, a[p + 1], mask, 0, used);
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < m; i++) cin >> b[i];
solve(0, a[0], MASK(m) - 1, 0, 0);
cout << "NO";
return 0;
}
# | 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... |