Submission #575477

#TimeUsernameProblemLanguageResultExecution timeMemory
575477jasminDetecting Molecules (IOI16_molecules)C++17
31 / 100
32 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<int32_t>& w, vector<int32_t>& ans){
    while(0<x){
        ans.push_back(last[x][i]);
        int x2=x;
        x-=w[last[x][i]];
        i=last[x2][i];
    }
}

std::vector<int32_t> find_subset(int32_t l, int32_t u, std::vector<int32_t> 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<int32_t> 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...