Submission #306579

#TimeUsernameProblemLanguageResultExecution timeMemory
306579peti1234Jelly Flavours (IOI20_jelly)C++17
0 / 100
69 ms764 KiB
#include <bits/stdc++.h>

using namespace std;
const int c=10002, p=2002, sok=1e9;
int n, maxi, regi[2*c], uj[2*c];
bool v[p];
vector<pair<int, int> > yr;
vector<pair<pair<int, int>, int> > xr;
int find_maximum_unique(int x, int y, vector<int> a, vector<int> b) {
    n=a.size();
    for (int i=0; i<n; i++) {
        xr.push_back({{a[i], b[i]}, i});
        yr.push_back({b[i], i});
    }
    sort(xr.begin(), xr.end()), sort(yr.begin(), yr.end());
    for (int i=0; i<=x; i++) regi[i]=sok, uj[i]=sok;
    regi[0]=0;
    for (int i=0; i<n; i++) {
        int fi=xr[i].first.first, se=xr[i].first.second, id=xr[i].second;
        v[id]=1;
        for (int i=x; i>=0; i--) {
            uj[i]=min(uj[i], regi[i]+se);
            uj[i+fi]=min(uj[i+fi], regi[i]);
        }
        regi[0]=uj[0], uj[0]=sok;
        for (int i=1; i<=x; i++) regi[i]=min(uj[i], regi[i-1]), uj[i]=sok;
        int sum=0;
        if (regi[x]<=y) maxi=max(maxi, i+1);
        for (int j=0; j<n; j++) {
            int fi=yr[j].first, se=yr[j].second;
            if (!v[se]) {
                sum+=fi;
                if (regi[x]+sum<=y) maxi=max(maxi, i+j+2);
            }
        }
    }
    return maxi;
}
#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...