#include <bits/stdc++.h>
using namespace std;
using pii=pair<int, int>;
constexpr int mxN=20;
int n, m;
int a[mxN], b[mxN];
pii dp[1<<mxN];
int calc_res[1<<mxN];
int calc(int mask){
if (calc_res[mask])
return calc_res[mask];
int ret=0;
for (int i=0;i<m;++i)
ret+=b[i]*((mask>>i)&1);
return calc_res[mask]=ret;
}
void printt(vector<int>&v){
for (int i:v)
cout << i << " ";
cout << "\n";
}
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> m;
for (int i=0;i<n;++i)
cin >> a[i];
for (int i=0;i<m;++i)
cin >> b[i];
bool ok=false;
for (int mask=0;mask<(1<<m);++mask){
if (dp[mask].first==n)
ok=true;
for (int i=0;i<m;++i){
if (mask&(1<<i))
continue;
pii p = dp[mask];
if (dp[mask].second+b[i]==a[dp[mask].first]){
++p.first;
p.second=0;
}
else{
p.second+=b[i];
}
dp[mask+(1<<i)]=max(dp[mask+(1<<i)], p);
}
}
if (ok)
cout<<"YES";
else
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... |