Submission #1169467

#TimeUsernameProblemLanguageResultExecution timeMemory
1169467owieczkaJelly Flavours (IOI20_jelly)C++20
100 / 100
66 ms78664 KiB
#include "jelly.h"
#include <bits/stdc++.h>
using namespace std;
int dp[2'002][10'010];
pair<int, int> tab[2'002];
pair<int, int> tb[2'002];


int find_maximum_unique(int x, int y, std::vector<int> a, std::vector<int> b) {
	int n = a.size();
	for (int i = 0; i < n; i++)
	{
		tab[i+1] = {a[i], b[i]};
	}
	sort(tab+1, tab+n+1);
	for (int i = 1; i <= n; i++)
		tb[i] = {tab[i].second, i};
	sort(tb+1, tb+n+1);
	int ans = 0;
	for (int i = 0; i <= n; i++)
	{
		int m = INT_MAX;
		for (int a = 0; a <= x; a++)
		{
			m = min(dp[i][a], m);
		}
		int left = y - m;
		m = i;
		if (left < 0)goto here;
		for (int j = 1; j <= n; j++)
		{
			if (left < tb[j].first)break;
			if (tb[j].second > i)
			{
				left -= tb[j].first;
				m++;
			}
		}
		ans = max(m, ans);
		here:
		for (int a = 0; a <= x; a++)
		{
			dp[i+1][a] = dp[i][a] + tab[i+1].second;
			if (a >= tab[i+1].first) dp[i+1][a] = min(dp[i+1][a], dp[i][a-tab[i+1].first]);
		}
	}
	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...