Submission #1169260

#TimeUsernameProblemLanguageResultExecution timeMemory
1169260RoupiqJelly Flavours (IOI20_jelly)C++20
44 / 100
2096 ms51016 KiB
#include "jelly.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std;

#define maxeq(a, b) a = max(a, b)

template <typename T>
ostream &operator<<(ostream &o, const vector<T> &v)
{
	o << "[";
	for (int i = 0; i < size(v); i++)
	{
		o << (i ? "," : "") << v[i];
	}
	o << "]";
	return o;
}

int dp_solve(int x, int y, vector<int> a, vector<int> b)
{
	vector<vector<int>> dp;
	dp.resize(x + 1, vector<int>(y + 1, INT_MIN));
	dp[0][0] = 0;
	for (int p = 0; p < size(a); p++)
	{
		for (int i = x; i >= 0; i--)
		{
			for (int j = y; j >= 0; j--)
			{
				if (i - a[p] >= 0)
					maxeq(dp[i][j], dp[i - a[p]][j] + 1);
				if (j - b[p] >= 0)
					maxeq(dp[i][j], dp[i][j - b[p]] + 1);
			}
		}
	}
	int res = 0;
	for (int i = 0; i <= x; i++)
	{
		for (int j = 0; j <= y; j++)
		{
			maxeq(res, dp[i][j]);
		}
	}
	return res;
}

int subtask3(int x, int y, vector<int> a, vector<int> b)
{
	int res = 0;
	vector<int> new_a;
	for (int i = 0; i < ssize(b); i++)
	{
		if (b[i])
			new_a.push_back(a[i]);
		else
			res++;
	}

	a = new_a;
	ranges::sort(a);
	for (auto r : a)
	{
		if (x - r < 0)
			break;
		x -= r;
		res++;
	}
	return res;
}

int find_maximum_unique(int x, int y, vector<int> a, vector<int> b)
{
	int n = size(a);
	int res = 0;
	if (x <= 500 && y <= 500 && n <= 200)
	{
		res = dp_solve(x, y, a, b);
	}
	else if (y == 0)
	{
		res = subtask3(x, y, a, b);
	}
	else
	{
		res = dp_solve(x, y, a, b);
	}

	return res;
}
#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...