Submission #433430

#TimeUsernameProblemLanguageResultExecution timeMemory
433430PbezzJelly Flavours (IOI20_jelly)C++14
100 / 100
178 ms152516 KiB
#include "jelly.h"
#include <vector>
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back
typedef pair<int,int> pii;

const ll MAXN = 2e5+5;
const ll INF = 1e9+7;

int find_maximum_unique(int x,int y,std::vector<int>a,std::vector<int>b){
	int n = a.size(),i,j;

	pii c[n];

	for(i=0;i<n;i++){
	c[i]={a[i],b[i]};
	}

	sort(c,c+n);

	int adp[n+1][x+1]={},bdp[n+1][y+1]={};
//adp[i][j] e minimo dinheiro de b para comprar i primeiros de c
//com budget de j na loja A


	for(i=1;i<=n;i++){
	for(j=0;j<=x;j++){

	adp[i][j] = adp[i-1][j] + c[i-1].second;

	if(j-c[i-1].first>=0){
	adp[i][j] = min(adp[i][j], adp[i-1][j-c[i-1].first] );}
//	cout<<j<<" "<<adp[i][j]<<"  ";
	}
}

	for(i=n-1;i>=0;i--){
	for(j=0;j<=y;j++){

	bdp[i][j] = bdp[i+1][j];

	if(j-c[i].second>=0){
	bdp[i][j]=max(bdp[i][j], 1 + bdp[i+1][j-c[i].second]);
	}

	}
}
int ans=0;
	for(i=0;i<=n;i++){

	if(y-adp[i][x]>=0){
ans=max(ans,i+bdp[i][y-adp[i][x]]);
//	cout<<i<<" "<<adp[i][x]<<" "<<bdp[i][y-adp[i][x]]<<endl;
}
}

	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...