Submission #1169066

#TimeUsernameProblemLanguageResultExecution timeMemory
11690664QT0RJelly Flavours (IOI20_jelly)C++20
44 / 100
2028 ms40652 KiB
#include "jelly.h"
#include <bits/stdc++.h>
using namespace std;

int find_maximum_unique(int x, int y, vector<int> a, vector<int> b){
	int n = a.size();
	int zeros=0;
	int mx=0;
	bool podz4=true,podz5=true;
	for (int i = 0; i<n; i++){
		if (a[i]!=b[i])podz5=false;
		if (b[i]!=b[0])podz4=false;
	}
	if (podz4){
		if (b[0]==0)return n;
		sort(a.begin(),a.end());
		while(y>b.back() && a.size()){
			y-=b.back();
			b.pop_back();
			a.pop_back();
			zeros++;
			n--;
		}
		vector<int> dp(x+1);
		for (int i = 0; i<n; i++){
			if (!a[i]){
				zeros++;
				continue;
			}
			for (int j = x; j>=a[i]; j--){
				dp[j]=max(dp[j],dp[j-a[i]]+1);
				mx=max(mx,dp[j]);
			}
		}
		return mx+zeros;
	}
	// if (podz5){
	// 	bitset<20001> os;
	// 	os[0]=1;
	// 	for (int i = 0; i<n; i++)os|=(os<<a[i]);
	// 	vector<int> dp(x+y+1);
	// 	for (int i = 0; i<n; i++){
	// 		if (!a[i]){
	// 			zeros++;
	// 			continue;
	// 		}
	// 		for (int j = x+y; j>=a[i]; j--){
	// 			dp[j]=max(dp[j],dp[j-a[i]]+1);
	// 			mx=max(mx,dp[j]);
	// 		}
	// 	}
	// 	if (os[x])return mx+zeros;
	// 	else return max(0,mx)+zeros;
	// }
	vector<vector<int>> dp(x+1,vector<int>(y+1));
	for (int i = 0; i<n; i++){
		if (!a[i] || !b[i]){
			zeros++;
			continue;
		}
		for (int j = x; j>=0; j--){
			for (int u = y; u>=0; u--){
				if (j>=a[i])dp[j][u]=max(dp[j][u],dp[j-a[i]][u]+1);
				if (u>=b[i])dp[j][u]=max(dp[j][u],dp[j][u-b[i]]+1);
				mx=max(mx,dp[j][u]);
			}
		}
	}
	return mx+zeros;
}
#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...