Submission #218527

#TimeUsernameProblemLanguageResultExecution timeMemory
218527emil_physmathDetecting Molecules (IOI16_molecules)C++17
31 / 100
45 ms65540 KiB
#include "molecules.h" #include <iostream> #include <vector> using namespace std; vector<int> find_subset(int l, int u, vector<int> w) { int n = w.size(); vector<vector<int> > prev(n, vector<int>(u + 1, -1)); vector<vector<bool> > take(n, vector<bool>(u + 1)); prev[0][0] = prev[0][w[0]] = 0; take[0][w[0]] = true; for (int i = 1; i < n; ++i) { prev[i][0] = i; take[i][0] = false; for (int j = 1; j <= u; ++j) if (prev[i - 1][j] != -1) { take[i][j] = false; prev[i][j] = i - 1; } else if (j - w[i] >= 0 && prev[i - 1][j - w[i]] != -1) { take[i][j] = true; prev[i][j] = i - 1; } } for (int j = l; j <= u; ++j) if (prev[n - 1][j] != -1) { vector<int> res; int i = n - 1; while (i >= 0) { if (take[i][j]) { res.push_back(i); if (i == prev[i][j]) return res; j -= w[i]; i = prev[i][j]; } else if (prev[i][j] == i) return res; else i = prev[i][j]; } return res; } return vector<int>(0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...