제출 #982425

#제출 시각아이디문제언어결과실행 시간메모리
982425MarwenElarbiDetecting Molecules (IOI16_molecules)C++17
31 / 100
40 ms65536 KiB
#include<bits/stdc++.h> //#include "molecules.h" using namespace std; //#pragma GCC optimize("O3") //#pragma GCC optimize("unroll-loops") #define fi first #define se second #define ll long long #define pb push_back mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); std::vector<int> find_subset(int l, int u, std::vector<int> w){ pair<int,int> par[u+1]; int n=w.size(); bool dp[n+1][u+1]; memset(dp,0,sizeof dp); for (int i = 0; i <= u; ++i) { par[i]={n,i}; } dp[0][0]=1; for (int i = 1; i <= n; ++i) { int cur=w[i-1]; for (int j = 0; j <= u; ++j) { dp[i][j]=dp[i-1][j]; if(j>=cur){ if(dp[i][j]==0&&dp[i-1][j-cur]==1){ par[j]={i-1,j-cur}; dp[i][j]|=dp[i-1][j-cur]; } } } } vector<int> ans; /*for (int i = 0; i <= u; ++i) { cout <<par[i].se<<" "; }cout <<endl;*/ for (int i = l; i <= u; ++i) { if(dp[n][i]){ while(i>0){ //cout <<i<<endl; ans.pb(par[i].fi); i=par[i].se; //break; } break; } } sort(ans.begin(),ans.end()); return ans; } /*int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int n, l, u; assert(3 == scanf("%d %d %d", &n, &l, &u)); std::vector<int> w(n); for (int i = 0; i < n; i++) assert(1 == scanf("%d", &w[i])); std::vector<int> result = find_subset(l, u, w); printf("%d\n", (int)result.size()); for (int i = 0; i < (int)result.size(); i++) printf("%d%c", result[i], " \n"[i == (int)result.size() - 1]); }*/
#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...