Submission #288841

#TimeUsernameProblemLanguageResultExecution timeMemory
288841BasilhijazDetecting Molecules (IOI16_molecules)C++17
31 / 100
88 ms65540 KiB
#include "molecules.h" #include<bits/stdc++.h> using namespace std; const int N = 1e4 + 1; bool dp[N][N]; int n; vector<int> ans; bool ok = 0; void get(vector<int> arr, int i, int sum, vector<int> an){ if(ok)return; if(i == 0 && sum != 0 && dp[n - 1][sum]){ an.push_back(i); ans = an; ok = 1; return; } if(i == 0 && sum == 0){ ans = an; ok = 1; return; } if(dp[i - 1][sum]){ get(arr, i - 1, sum, an); } if(sum >= arr[i] && dp[i - 1][sum - arr[i]]){ an.push_back(i); get(arr, i - 1, sum - arr[i], an); } } std::vector<int> find_subset(int l, int u, std::vector<int> w) { n = w.size(); for(int j = 0; j < n; j++){ dp[j][w[j]] = 1; dp[j][0] = 1; } for(int i = 1; i < n; i++){ for(int j = 0; j <= 1e4 + 1; j++){ if(j == 0){dp[i][j] = 1; continue;} if(j >= w[i]){ dp[i][j] = dp[i - 1][j - w[i]] || dp[i - 1][j]; } else{ dp[i][j] = dp[i - 1][j]; } } } for(int i = l; i <= u; i++){ if(dp[n - 1][i]){ get(w, n, i, ans); break; } } sort(ans.begin(), ans.end()); 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...