Submission #1314706

#TimeUsernameProblemLanguageResultExecution timeMemory
1314706mikolajszJelly Flavours (IOI20_jelly)C++20
24 / 100
103 ms97328 KiB
#include <bits/stdc++.h> #include "jelly.h" using namespace std; const int MAXN = 6e5+2; const int inf = 1e9+69; int n,x,y,ans; vector<pair<int, int>> ab(2002); vector<vector<int>> sums(2001),dp(2001,vector<int>(10001,inf)); vector<int> b_suff[2001]; int how_many(int suffix, int remaining){ if(suffix>n) return 0; if(remaining<0) return 0; int xd = upper_bound(sums[suffix].begin(),sums[suffix].end(),remaining)-sums[suffix].begin(); return xd; } int find_maximum_unique(int x, int y, vector<int> a, vector<int> b){ int n = a.size(); for(int i=1; i<=n; i++){ab[i].first=a[i-1]; ab[i].second=b[i-1];} sort(ab.begin()+1,ab.begin()+1+n); for(int i=1; i<=n; i++){ for(int j=i; j<=n; j++) b_suff[i].push_back(ab[j].second); sort(b_suff[i].begin(),b_suff[i].end()); sums[i].resize(b_suff[i].size()); sums[i][0]=b_suff[i][0]; for(int j=1; j<b_suff[i].size(); j++) sums[i][j]=sums[i][j-1]+b_suff[i][j]; } dp[0][0]=0; for(int i=1; i<=n; i++){ for(int p=0; p<=x; p++){ if(dp[i-1][p]==inf) continue; if(p+ab[i].first<=x) dp[i][p+ab[i].first]=min(dp[i][p+ab[i].first],dp[i-1][p]); if(dp[i-1][p]+ab[i].second<=y) dp[i][p]=min(dp[i][p],dp[i-1][p]+ab[i].second); } for(int p=0; p<=x; p++){ if(dp[i][p]==inf) continue; if(dp[i][p]>y) continue; ans=max(ans,i+how_many(i+1,y-dp[i][p])); } } //cout << how_many(3,8) << "\n"; 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...