제출 #265592

#제출 시각아이디문제언어결과실행 시간메모리
265592cjoaDetecting Molecules (IOI16_molecules)C++11
46 / 100
852 ms65540 KiB
#include "molecules.h" #include <iostream> #include <vector> #include <map> #include <cassert> using namespace std; typedef vector<bool> VB; typedef vector<VB> VVB; int N; vector<int> W; VVB cached; VVB memo; VVB P; bool go(int n, int sum) { if (sum == 0) return true; if (sum < 0) return false; if (n >= N) return false; if (cached[n][sum]) return memo[n][sum]; bool res = false; // take if (go(n+1, sum-W[n])) { res = true; P[n][sum] = true; } // ignore else if (go(n+1, sum)) { res = true; P[n][sum] = false; } cached[n][sum] = true; memo[n][sum] = res; return res; } std::vector<int> find_subset(int l, int u, std::vector<int> w) { N = w.size(); W = w; // assert(N <= 100 && u <= 1000); cached = VVB(N, VB(u+1)); memo = VVB(N, VB(u+1)); P = VVB(N, VB(u+1)); for (int sum = l; sum <= u; ++sum) { bool can = go(0, sum); if (can) { vector<int> res; for (int n = 0, s = sum; s != 0; ) { if (P[n][s]) { res.push_back(n); s -= W[n]; n++; } else { n++; } } return res; } } return {}; }
#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...