#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int mod = 1e9 + 7;
const int N = (int)2e5 + 7;
#define skip continue
#define uno first
#define duo second
#define GO while(tt--)
#define ins insert
#define pb push_back
#define all(x) x.begin(), x.end()
#define Kaldun ios::sync_with_stdio(false); cin.tie(nullptr)
#define int long long
int bp(int a, int n) {
if(n == 0) return 1;
if(n % 2 == 1) return (bp(a, n-1) * a) % mod;
long long b = bp(a, n/2);
return (b * b) % mod;
}
int dp[22][(1<<20) + 2];
int lcm(int a,int b){ return (a * b) / __gcd(a,b);}
void solve(){
int n,m;
cin>>n>>m;
int a[n+1],b[m+1];
int cnt[1005]{};
int mx = 0;
for(int i=1;i<=n;i++){
cin>>a[i];
cnt[a[i]] = 1;
mx=max(mx,a[i]);
}
for(int i=0;i<m;i++){
cin>>b[i];
}
vector<int> g[1005];
for (int mask=0;mask < (1<<m); mask++) {
int t = 0;
for (int i = 0; i < m; i++) {
if (mask & (1 << i)) {
t += b[i];
}
}
if (t <= mx && cnt[t]) {
g[t].push_back(mask);
}
}
dp[0][0] = 1;
for (int i = 0; i < n; i++) {
int ok = 0;
for (int mask = 0; mask < (1 << m); mask++) {
if (!dp[i][mask]) continue;
for (int sb : g[a[i + 1]]) {
if ((sb & mask) == 0) {
dp[i + 1][mask | sb] = 1;
ok = 1;
}
}
}
if (ok == 0) {
cout << "NO" <<endl;;
return;
}
}
cout<<"YES"<<endl;
}
signed main() {
Kaldun;
cout.precision(0);
int tt=1;
//cin>>tt;
while(tt--){
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... |