Submission #433313

#TimeUsernameProblemLanguageResultExecution timeMemory
433313Tiago_MarquesJelly Flavours (IOI20_jelly)C++17
100 / 100
268 ms304752 KiB
#include "jelly.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long int ll;
typedef pair<ll, ll> ii;

#define REP(i, a, b) for (ll i=a; i<b; i++)
#define fs first
#define sd second

int find_maximum_unique(int x, int y, std::vector<int> a, std::vector<int> b)
{
	int n = a.size();
	ii c[n];
	REP(i, 0, n)
	{
        c[i].fs = a[i];
        c[i].sd = b[i];
	}
	sort (c, c+n);
	ll adp[n+1][x+1] = {}, bdp[n+1][y+1] = {};
	REP(i, 1, n+1) REP(j, 0, x+1)
	{
        adp[i][j] = adp[i-1][j] + c[i-1].sd;
        if (j >= c[i-1].fs)
            adp[i][j] = min (adp[i][j], adp[i-1][j - c[i-1].fs]);
	}
	for (ll i=n-1; i>=0; i--) REP(j, 0, y+1)
	{
        bdp[i][j] = bdp[i+1][j];
        if (j >= c[i].sd)
            bdp[i][j] = max (bdp[i][j], bdp[i+1][j - c[i].sd] + 1);
	}
	ll ans = 0;
	REP(i, 0, n+1)
	{
        ll falta = y - adp[i][x];
        if (falta >= 0)
            ans = max (ans, i + bdp[i][falta]);
	}
	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...