#include <bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define eb emplace_back
#define inf INT_MAX
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define FAR(i, a, b) for (int i = (a); i >= (b); i--)
#define all(x) x.begin(), x.end()
const int MOD = 1e9 + 7;
using namespace std;
void solve()
{
int n, m;
cin >> n >> m;
int a[n + 5], b[m + 5];
FOR(i, 0, n)
cin >> a[i];
FOR(i, 0, m)
cin >> b[i];
vector<int> v[n + 5];
FOR(i, 0, 1 << m)
{
int cur = 0;
FOR(j, 0, m)
if ((i & (1 << j)) > 0)
cur += b[j];
FOR(j, 0, n)
if (a[j] == cur)
v[j].pb(i);
}
FOR(i, 0, n)
{
if (v[i].size() == 0)
{
cout << "NO";
return;
}
}
int dp[m + 5][(1 << m) + 5];
FOR(i, 0, m)
fill(dp[i], dp[i] + (1 << m) + 1, 0);
for (auto x : v[0])
dp[0][x] = 1;
FOR(i, 1, n)
{
FOR(j, 0, 1 << m)
{
if (dp[i - 1][j] == 0)
{
continue;
}
for (auto x : v[i])
if ((x & j) == 0)
dp[i][x + j] = 1;
}
}
FOR(i, 0, 1 << m)
{
if (dp[n - 1][i] == 1)
{
cout << "YES";
return;
}
}
cout << "NO";
}
int main()
{
int T = 1;
// cin >> T;
while (T--)
{
solve();
}
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... |