이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> dp;
vector<int> mA;
int best = 0;
int solve(int u, const vector<int>& w, int l, vector<int>& taken){
if(l < 0 || u <= 0) return 0;
if(dp[l][u] != -1) return dp[l][u];
auto copy = taken;
dp[l][u] = solve(u, w, l-1, taken);
int alt = -1;
if(w[l] <= u){
copy.push_back(l);
alt = w[l] + solve(u - w[l], w, l-1, copy);
}
if(alt > dp[l][u]) {
dp[l][u] = alt;
taken = copy;
}
if(dp[l][u] > best){
best = dp[l][u];
mA = taken;
}
return dp[l][u];
}
vector<int> find_subset(int l, int u, vector<int> w){
dp = vector<vector<int>>(w.size(), vector<int>(u+1, -1));
vector<int> taken;
solve(u, w, w.size() - 1, taken);
if(best < l){
return {};
}
return mA;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |