Submission #1169201

#TimeUsernameProblemLanguageResultExecution timeMemory
1169201PiokemonJelly Flavours (IOI20_jelly)C++20
100 / 100
66 ms78660 KiB
#include "jelly.h"
#include <bits/stdc++.h>
using namespace std;

constexpr int N = 2000;
constexpr int A = 10'000;

int dp[N+9][A+9];
bool mam[N+9];

int find_maximum_unique(int sA, int sB, vector<int> a, vector<int> b) {
	int n = a.size();
	vector<pair<int,int>> sa,sb;
	for (int x=0;x<n;x++){
		sa.push_back({a[x],x});
		sb.push_back({b[x],x});
	}
	sort(sa.begin(),sa.end()); sort(sb.begin(),sb.end());
	for (int x=0;x<=A;x++)dp[0][x]=1e9;
	dp[0][0]=b[sa[0].second]; dp[0][sa[0].first]=0;
	int odp=0;
	mam[sa[0].second]=1;
	for (int x=1;x<n;x++){
		int zost=-1;
		for (int y=0;y<=sA;y++)zost=max(zost,sB-dp[x-1][y]);
		if (zost<0)break;
		//cerr << x << ' ' << zost << '\n';
		int temp=x;
		for (int y=0;y<n;y++){
			if (!mam[sb[y].second]){
				if (zost >= sb[y].first){
					zost-=sb[y].first;
					temp++;
				}
				else break;
			}
		}
		odp = max(odp,temp);

		mam[sa[x].second]=1;
		for (int y=0;y<=A;y++){
			dp[x][y] = dp[x-1][y]+b[sa[x].second];
			if (y>=sa[x].first)dp[x][y]=min(dp[x][y],dp[x-1][y-sa[x].first]);
		}
	}
	int tempie=0;
	for (int x:a)tempie+=x;
	if (tempie<=sA)return n;
	return odp;
}
#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...