Submission #290495

#TimeUsernameProblemLanguageResultExecution timeMemory
290495aymanrsDetecting Molecules (IOI16_molecules)C++14
31 / 100
48 ms65540 KiB
#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 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...