# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
156512 | 2019-10-06T09:35:02 Z | a_player | Detecting Molecules (IOI16_molecules) | C++14 | 0 ms | 0 KB |
#include <bits/stdc++.h> #define f first #define s second #define mp make_pair #define pb push_back using namespace std; //typedef long long ll; pair<int,int> dp[1001][1001]; int v[1001]; int N,uu,ll; bool ric(int n,int val){ if(val>=uu&&val<=ll)return 1; if(n==N)return 0; if(val>ll)return 0; if(dp[n][val].f!=-1)return dp[n][val].f; if(ric(n+1,val)){ dp[n][val].f=1; dp[n][val].s=0; return 1; } else if(ric(n+1,val+v[n])){ dp[n][val].f=1; dp[n][val].s=1; return 1; } else { dp[n][val].f=0; dp[n][val].s=-1; return 0; } return 0; } vector<int> find_subset(int l,int u,vector<int> w){ vector<int> sol; if(w[0]*w.size()<u)return sol; if(w[0]>l)return sol; int h=u/w[0]; int s=h*w[0]; if(s+w[0]>l)return sol; if(s==u){ for(int i=0;i<h;i++)sol.push_back(i); return sol; } if(s+w[0]>=u&&s+w[0]<=l){ for(int i=0;i<h+1;i++)sol.push_back(i); retur sol; } return sol; }