제출 #1304241

#제출 시각아이디문제언어결과실행 시간메모리
1304241Zone_zoneeJelly Flavours (IOI20_jelly)C++20
0 / 100
4 ms372 KiB
#include "jelly.h"
#include <vector>
#include <cstring>
#include <algorithm>

int find_maximum_unique(int x, int y, std::vector<int> a, std::vector<int> b) {
	const int N = 2e3+10, M = 1e4+10;
	int ans = 0;
	int dp1[M], dp2[M];
	memset(dp1, 0, sizeof dp1);
	memset(dp2, 0, sizeof dp2);
	int n = a.size();
	std::vector<std::pair<int, int>> v;
	for(int i = 0; i < n; ++i) v.push_back({a[i], b[i]});
	std::sort(v.begin(), v.end());
	for(int i = 0; i < n; ++i) std::tie(a[i], b[i]) = v[i];
	for(int i = 0; i < n; ++i){
		for(int j = y; j >= b[i]; --j){
			dp1[j] = std::max(dp1[j], dp1[j-b[i]]+a[i]);
		}
	}
	for(int i = 0; i < n; ++i){
		for(int j = y; j >= b[i]; --j){
			dp2[j] = std::max(dp2[j], dp2[j-b[i]]+1);
		}
	}
	int sum = 0;
	for(int i = 0; i < n; ++i){
		sum += a[i];
		for(int j = 0; j <= y; ++j){
			if(x >= sum-dp1[j]){
				ans = std::max(ans, i+1 + dp2[y-j]);
			}
		}
	}
	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...