#include<bits/stdc++.h>
using namespace std;
int dp[1<<20][21],a[21],b[21],mp[1005*20],n,m,cnt = 1;
vector<int> subset[1005];
int main()
{
cin >> n >> m;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
if(!mp[a[i]]) mp[a[i]] = cnt++;
}
for(int i = 1;i <= m;i++)
cin >> b[i];
for(int mask = 0;mask < (1<<m);mask++)
{
int cur = 0;
dp[mask][0] = 1;
for(int j = 0;j < m;j++)
if(mask&(1<<j)) cur += b[j+1];
if(mp[cur]) subset[cur].push_back(mask);
}
for(int i = 1;i <= n;i++)
for(int mask = 0;mask < (1<<m);mask++)
for(auto x:subset[a[i]])
if((x&mask) == x)
dp[mask][i] |= dp[mask^x][i-1];
if(dp[(1<<m)-1][n]) cout << "YES\n";
else cout << "NO\n";
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... |