#include <bits/stdc++.h>
using namespace std;
int sum[1 << 20];
int a[20], b[20];
int n, m;
void wczytaj(){
cin >> n >> m;
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < m; i++) cin >> b[i];
}
void precompute(){
for(int mask = 0; mask < (1 << m); mask++)
for(int i = 0; i < m; i++)
if(mask & (1 << i)) sum[mask] += b[i];
}
int main(){
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
wczytaj();
precompute();
vector<bool> DP(1<<m);
DP[0] = 1;
for(int i = 0; i < n; i++){
vector<bool> tmp(1<<m);
for(int mask = 0; mask < (1 << m); mask++){
if(!DP[mask]) continue;
int alter = ((1 << m) - 1) ^ mask;
for(int submask = alter; submask; submask = (submask - 1) & alter)
if(sum[submask] == a[i]) tmp[mask | submask] = true;
}
DP = tmp;
}
for(int mask = 0; mask < (1 << m); mask++)
if(DP[mask]){
cout<<"YES";
return 0;
}
cout<<"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... |