이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... |