이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> valores(m);
vector<int> notas(m);
for (int i = 0; i < m; i++) {
cin >> valores[i];
}
for (int i = 0; i < m; i++) {
cin >> notas[i];
}
vector<int> residual(1 << m, -1);
vector<int> cobertos(1 << m, -1);
residual[0] = 0;
cobertos[0] = 0;
int possivel = 0;
for (int s = 0; s < (1 << m); s++) {
for (int p = 0; p < m; p++) {
if ((s & (1 << p)) == 0) continue;
int ant = s & ~(1 << p);
if (cobertos[ant] == -1) continue;
int novo = residual[ant] + notas[p];
if (cobertos[ant] < n) {
int alvo = valores[cobertos[ant]];
if (novo < alvo) {
cobertos[s] = cobertos[ant];
residual[s] = novo;
} else if (novo == alvo) {
cobertos[s] = cobertos[ant] + 1;
residual[s] = 0;
}
}
}
if (cobertos[s] == n) {
possivel = 1;
}
}
if (possivel == 1) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
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... |