This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define allr v.rbegin(), v.rend()
#define sllr s.rbegin(), s.rend()
#define all v.begin(), v.end()
#define sll s.begin(), s.end()
#define pii pair <int, int>
#define int long long
#define pb push_back
#define pp pop_back
#define sc second
#define fr first
using namespace std;
const int N=2097152;
signed main() {
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
int mask, sum, n, m, i;
cin >> n >> m;
vector <int> v(n), k(m), p[n], dp(N);
for (i=0; i<n; i++) {
cin >> v[i];
}
for (i=0; i<m; i++) {
cin >> k[i];
}
for (mask=0; mask<(1<<m); mask++) {
sum=0;
for (i=0; i<m; i++) {
if (mask&(1<<i)) sum+=k[i];
}
for (i=0; i<n; i++) {
if (sum==v[i]) p[i].pb(mask);
}
}
for (i=1; i<=N; i++) {
dp[i]=-1;
}
for (i=0; i<n; i++) {
for (mask=(1<<m)-1; mask>=0; mask--) {
if (dp[mask]!=-1) {
for (auto j: p[i]) {
if (!(j&mask)) {
dp[(j|mask)]=dp[mask]+1;
if (dp[(j|mask)]==n) {
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... |