Submission #430103

#TimeUsernameProblemLanguageResultExecution timeMemory
430103ngraceJelly Flavours (IOI20_jelly)C++14
35 / 100
2075 ms152368 KiB
#include "jelly.h"
#include <vector>
#include <iostream>
#include <limits.h>
using namespace std;
#define v vector

int N;
v<int> A;
v<int> B;

v<v<int>> memo2;
int dp2(int cur, int left){
	if(cur==N) return 0;
	if(left==0) return 0;
	if(memo2[cur][left]!=-1) return memo2[cur][left];
	int out=dp2(cur+1,left);
	if(A[cur]<=left) out=max(out, 1+dp2(cur+1,left-A[cur]));
	return memo2[cur][left]=out;
}

v<v<v<int>>> memo3;
int dp3(int cur, int x, int y){
	if(cur==N) return 0;
	if(memo3[cur][x][y]!=-1) return memo3[cur][x][y];
	int out=dp3(cur+1,x,y);
	if(A[cur]<=x) out=max(out, 1+dp3(cur+1,x-A[cur],y));
	if(B[cur]<=y) out=max(out, 1+dp3(cur+1,x,y-B[cur]));
	return memo3[cur][x][y]=out;
}

int find_maximum_unique(int x, int y, std::vector<int> a, std::vector<int> b) {
	N = a.size();
	bool sub4=true;
	bool sub5=true;
	for(int i=0;i<N;i++){
		A.push_back(a[i]);
		B.push_back(b[i]);
		if(a[i]!=b[i]) sub5=false;
		if(i!=0 && b[i]!=b[i-1]) sub4=false;
	}

	if(y==0){
		memo2=v<v<int>>(N,v<int>(x+1,-1));
		return dp2(0,x);
	}
	else if(sub4){
		memo2=v<v<int>>(N,v<int>(x+1,-1));
		int out=dp2(0,x);
		out+=y/b[0];
		if(out>N) out=N;
		return out;
	}
	else if(sub5){
		memo2=v<v<int>>(N,v<int>(x+y+1,-1));
		return dp2(0,x+y);
	}
	else if(N<=200 && x<=500 && y<=500){
		memo3=v<v<v<int>>>(N,v<v<int>>(x+1,v<int>(y+1,-1)));
		return dp3(0,x,y);
	}
}

Compilation message (stderr)

jelly.cpp: In function 'int find_maximum_unique(int, int, std::vector<int>, std::vector<int>)':
jelly.cpp:62:1: warning: control reaches end of non-void function [-Wreturn-type]
   62 | }
      | ^
#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...