Submission #288834

#TimeUsernameProblemLanguageResultExecution timeMemory
288834BasilhijazDetecting Molecules (IOI16_molecules)C++17
0 / 100
1 ms384 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 + 1); 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 + 1); 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 i = 0; i <= n; i++){ for(int j = 0; j <= 1e4 + 1; j++){ if(j == 0){dp[i][j] = 1; continue;} if(i == 0){ if(j >= w[i]){ dp[i][j] = dp[i][j - w[i]]; } else{ dp[i][j] = 0; } continue; } if(j >= w[i]){ dp[i][j] = dp[i][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...