Submission #1199700

#TimeUsernameProblemLanguageResultExecution timeMemory
119970012345678Jelly Flavours (IOI20_jelly)C++20
24 / 100
208 ms157028 KiB
#include "jelly.h"
#include <bits/stdc++.h>

using namespace std;

const int nx=2e3+5, kx=1e4+5;

int dp[nx][kx], dpr[nx][kx], res;
vector<pair<int, int>> v;

int find_maximum_unique(int x, int y, std::vector<int> a, std::vector<int> b) {
	int n = a.size();
	v.push_back({INT_MIN, 0});
	for (int i=0; i<n; i++) v.push_back({a[i], b[i]});
	sort(v.begin(), v.end());
	for (int i=1; i<=n; i++)
	{
		for (int j=0; j<kx; j++)
		{
			// dp[i][j]=minimum money on a given that use j on b to fill 1->i
			dp[i][j]=dp[i-1][j]+v[i].first;
			if (j>=v[i].second) dp[i][j]=min(dp[i][j], dp[i-1][j-v[i].second]);
		}
	}
	for (int i=n; i>=1; i--)
	{
		for (int j=0; j<kx; j++)
		{
			dpr[i][j]=dpr[i+1][j];
			if (j>=v[i].second) dpr[i][j]=min(dpr[i][j], dpr[i+1][j-v[i].second]+1);
		}
	}
	for (int i=0; i<=n; i++)
	{
		for (int j=0; j<=y; j++)
		{
			if (dp[i][j]<=x) res=max(res, i+dpr[i+1][y-j]);
		}
	}
	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...