Submission #315917

#TimeUsernameProblemLanguageResultExecution timeMemory
315917dangtiendung1201Jelly Flavours (IOI20_jelly)C++14
100 / 100
174 ms156920 KiB
#include <bits/stdc++.h>
#define debug(x) cerr << #x << " = " << x << endl;
#define task ""
using namespace std;
int fdp[2001][10001], bdp[2001][10001], ans;
pair<int, int> c[2001];
int n;
int find_maximum_unique(int x, int y, vector<int> a, vector<int> b)
{
    ans = 0;
    n = a.size();
    for (int i=0; i<n; i++) c[i] = make_pair(a[i], b[i]);
    sort(c, c+n);
    for (int i=1; i<=n; i++)
    {
        for (int j=0; j<=x; j++)
        {
            fdp[i][j] = fdp[i-1][j]+c[i-1].second;
            if(j >= c[i-1].first)
            {
                fdp[i][j] = min(fdp[i][j], fdp[i-1][j-c[i-1].first]);
            }
        }
    }
    for(int i=n-1; i>=0; i--)
    {
        for (int j=0; j<=y; j++)
        {
            bdp[i][j] = bdp[i+1][j];
            if(j >= c[i].second)
            {
                bdp[i][j] = max(bdp[i][j], bdp[i+1][j-c[i].second]+1);
            }
        }
    }
    for (int i=0; i<=n; i++)
    {
        int yleft = y-fdp[i][x];
        if(yleft >= 0) ans = max(ans, i+bdp[i][yleft]);
    }
    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...