Submission #572785

#TimeUsernameProblemLanguageResultExecution timeMemory
572785jasminDetecting Molecules (IOI16_molecules)C++14
31 / 100
31 ms65536 KiB
//#include<bits/stdc++.h>
#include "molecules.h"

using namespace std;
//#define int long long

void reconstruct(int x, int i, vector<vector<int> >& last, vector<int>& w, vector<int>& ans){
    while(0<x){
        ans.push_back(last[x][i]);
        int x2=x;
        x-=w[last[x][i]];
        i=last[x2][i];
    }
}

std::vector<int> find_subset(int l, int u, std::vector<int> w) {
    int n=w.size();
    int r=u;
    vector<vector<bool> > dp(r+1, vector<bool> (n+1));
    vector<vector<int> > last(r+1, vector<int> (n+1, -1));

    dp[0][0]=true;
    for(int x=0; x<=r; x++){
        for(int i=0; i<n; i++){
            if(!dp[x][i]) continue;

            dp[x][i+1]=true;
            last[x][i+1]=last[x][i];
            if(x+w[i]<=r){
                dp[x+w[i]][i+1]=true;
                last[x+w[i]][i+1]=i;
            }
        }
    }

    vector<int> ans;
    for(int i=l; i<=r; i++){
        if(dp[i][n]){
            reconstruct(i, n, last, w, ans);
            break;
        }
    }

    return ans;
}
#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...