제출 #285546

#제출 시각아이디문제언어결과실행 시간메모리
285546SamAndDetecting Molecules (IOI16_molecules)C++17
9 / 100
1 ms384 KiB
#include "molecules.h" #include <bits/stdc++.h> using namespace std; #define m_p make_pair #define fi first #define se second #define sz(x) ((int)(x).size()) #define all(x) (x).begin(),(x).end() typedef long long ll; const int N = 10004; int n; int a[N]; bitset<N> dp[N], p[N]; std::vector<int> find_subset(int l, int r, std::vector<int> w) { n = sz(w); for (int i = 1; i <= n; ++i) a[i] = w[i - 1]; vector<pair<int, int> > v; for (int i = 1; i <= n; ++i) v.push_back(m_p(a[i], i - 1)); sort(all(v)); reverse(all(v)); ll s = 0; for (int i = 0; i < n; ++i) { s += v[i].fi; if (l <= s && s <= r) { vector<int> ans; for (int j = 0; j <= i; ++j) ans.push_back(v[j].se); return ans; } } return {}; dp[0][0] = true; for (int i = 1; i <= n; ++i) { int x = a[i]; for (int j = 0; j <= r - x; ++j) { if (dp[i - 1][j]) { dp[i][j + x] = true; p[i][j + x] = true; } } for (int j = 0; j <= r; ++j) { if (dp[i - 1][j]) { dp[i][j] = true; p[i][j] = false; } } } for (int j = l; j <= r; ++j) { if (dp[n][j]) { vector<int> ans; int x = j; for (int i = n; i >= 1; --i) { if (p[i][x]) { ans.push_back(i - 1); x -= a[i]; } } return ans; } } 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...