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>
using namespace std;
constexpr int NMAX = 21;
bool dp[NMAX][(1<<NMAX)];
int N, M;
int A[NMAX], B[NMAX];
void Read () {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N >> M;
for (int i = 1; i <= N; ++ i )
cin >> A[i];
for (int i = 1; i <= M; ++ i )
cin >> B[i];
}
void Solve () {
dp[0][0] = true;
for (int i = 1; i <= N; ++ i ) {
vector <int> posib;
for (int j = 0; j < (1<<M); ++ j ) {
int sum = 0;
for (int k = 0; k < M; ++ k )
if ((j&(1<<k))) sum += B[k];
if (sum == A[i])
posib.push_back(j);
}
for (int mask = 0; mask < (1<<M); ++ mask ) {
for (auto it : posib) {
if ((mask&it) != it) continue;
dp[i][mask] |= dp[i-1][(mask^it)];
}
}
}
bool ans = false;
for (int mask = 0; mask < (1<<M); ++ mask )
ans |= dp[N][mask];
cout << (ans == true ? "YES" : "NO") << '\n';
}
int main () {
Read();
Solve();
return 0;
}
# | 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... |