#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll MAXN=20;
const ll MAXM=20;
ll n, m, a[MAXN], b[MAXM], s[1<<MAXM];
bool dp[2][1<<MAXM], ans;
int main()
{
cin >> n >> m;
for (int i=0; i<n; i++)
{
cin >> a[i];
}
for (int i=0; i<m; i++)
{
cin >> b[i];
}
for (int i=0; i<(1<<m); i++)
{
for (int j=0; j<m; j++)
{
if (i & (1<<j))
{
s[i]+=b[j];
}
}
}
dp[0][0]=1;
for (int i=0; i<n; i++)
{
for (int j=0; j<(1<<m); j++)
{
dp[(i+1)%2][j]=0;
}
for (int cur = 0; cur < (1 << m); cur++)
{
if (dp[i][cur]==0)
{
continue;
}
ll mask=(1<<m)-1-cur;
for (int submask = mask; submask >= 0; submask = (submask - 1) & mask)
{
int subset = mask ^ submask;
if (s[subset]==a[i])
{
dp[(i+1)%2][cur+subset]=1;
}
if (submask==0)
{
break;
}
}
}
}
for (int i=0; i<(1<<m); i++)
{
ans|=dp[n%2][i];
}
cout << (ans ? "YES":"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... |