제출 #1193741

#제출 시각아이디문제언어결과실행 시간메모리
1193741TAhmed33Jelly Flavours (IOI20_jelly)C++20
100 / 100
151 ms152720 KiB
#include "jelly.h"
#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
int find_maximum_unique(int x, int y, std::vector<int> a, std::vector<int> b) {
	vector <pair <int, int>> c;
	for (int i = 0; i < (int)a.size(); i++) {
		c.push_back({a[i], b[i]});
	}
	sort(c.begin(), c.end());
	int n = (int)c.size();
	int pre[n + 1][x + 1] = {}, suff[n + 2][y + 1] = {};
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= x; j++) {
			pre[i][j] = inf;
			pre[i][j] = pre[i - 1][j] + c[i - 1].second;
			if (c[i - 1].first <= j) {
				pre[i][j] = min(pre[i][j], pre[i - 1][j - c[i - 1].first]);
			}
		}
	}
	for (int i = n; i >= 1; i--) {
		for (int j = 0; j <= y; j++) {
			suff[i][j] = suff[i + 1][j];
			if (c[i - 1].second <= j) {
				suff[i][j] = max(suff[i][j], suff[i + 1][j - c[i - 1].second] + 1);
			}
		}
	}
	int mx = 0;
	for (int i = 0; i <= n; i++) {
		for (int j = 0; j <= x; j++) {
			if (pre[i][j] <= y) {
				mx = max(mx, i + suff[i + 1][y - pre[i][j]]);
			}
		}
	}
	return mx;
}
#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...