#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#ifdef LOCAL
#include "debug.h"
#else
#define dbg(...)
#endif
#define endl '\n'
#define int int64_t
const long long mod = 1000000007, MaxN = 200005, INF = 1e18;
void solve(){
int N, M, Max = 0;
cin >> N >> M;
vector<int>a(N), b(M);
for(int i = 0;i < N;i++){
cin >> a[i];
Max = max(Max, a[i]);
}
for(int i = 0;i < M;i++)cin >> b[i];
vector<vector<int>>subsets(Max + 1);
for(int mask = 1;mask < (1ll << M);mask++){
int sum = 0;
for(int i = 0;i < M;i++){
if((mask >> i) & 1)sum += b[i];
}
if(sum <= Max)subsets[sum].push_back(mask);
}
vector<int>dp(1ll << M);
dp[0] = 1;
for(int i = 0;i < N;i++){
vector<int>new_dp(1ll << M);
for(int mask = 0;mask < (1ll << M);mask++){
for(auto submask : subsets[a[i]]){
if(mask & submask)continue;
new_dp[mask | submask] |= dp[mask];
}
}
dp = new_dp;
}
int res = 0;
for(auto x : dp)res |= x;
cout << (res ? "YES" : "NO") << endl;
}
signed main()
{
#ifdef LOCAL
FileRedirect("test");
#endif
ios::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
// freopen("pails.in","r",stdin);
// freopen("pails.out","w",stdout);
int Tc = 1;
// cin >> Tc;
for(int T = 1;T <= Tc;T++)solve();
}
# | 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... |