#include <bits/stdc++.h>
#define NMAX 20
#define LOG 19
#define ll long long int
#define BASE 128
#define MOD 20232029
using namespace std;
ifstream fin("cod.in");
ofstream fout("cod.out");
int a[NMAX+1],b[NMAX+1];
bool dp[2][1<<NMAX];
int n,m;
int main()
{
cin >> n >> m;
for(int i=1;i<=n;i++)
{
cin >> a[i];
}
for(int i=0;i<m;i++)
{
cin >> b[i];
}
dp[0][0]=1;
for(int i=1;i<=n;i++)
{
vector<int> v;
for(int mask=1;mask < (1<<m);mask++)
{
int s=0;
for(int j=0;j<m;j++)
{
if(mask & (1<<j))
{
s += b[j];
}
}
if(s==a[i])
{
v.push_back(mask);
}
}
int curr = i%2;
dp[curr][0] = 0;
for(int mask=1;mask < (1<<m);mask++)
{
dp[curr][mask]=0;
for(int mask1 : v)
{
if((mask & mask1) == mask1)
{
dp[curr][mask] |= dp[!curr][mask ^ mask1];
if(dp[curr][mask])
{
break;
}
}
}
}
}
bool ok=0;
for(int mask=1;mask<(1<<m);mask++)
{
if(dp[n%2][mask])
{
ok=1;
}
}
cout << (ok ? "YES" : "NO");
}
# | 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... |