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 ll long long
#define pii pair<int, int>
#define endl '\n'
#define int ll
using namespace std;
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, M;
cin >> N >> M;
vector<int> ppl(N + 1), mny(M);
for(int i = 0; i < N; i++)
cin >> ppl[i];
ppl[N] = numeric_limits<int>::max();
for(int j = 0; j < M; j++)
cin >> mny[j];
vector<int> pref_sol(1 << M, -1);
vector<int> cur_sol(1 << M, 0);
pref_sol[0] = 0;
for(int mask = 1; mask < (1 << M); mask++) {
for(int pick = 0; pick < M; pick++) {
if((mask & (1 << pick)) == 0)
continue;
int prev = mask & (~(1 << pick));
if(pref_sol[prev] == -1)
continue;
if(cur_sol[prev] + mny[pick] > ppl[pref_sol[prev]])
continue;
else if(cur_sol[prev] + mny[pick] < ppl[pref_sol[prev]]) {
cur_sol[mask] = cur_sol[prev] + mny[pick];
pref_sol[mask] = pref_sol[prev];
}
else {
cur_sol[prev] += mny[pick];
pref_sol[mask] = 1 + pref_sol[prev];
}
}
}
if(pref_sol[(1 << M) - 1] == N) {
cout << "YES" << endl;
}
else cout << "NO" << endl;
}
# | 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... |