제출 #673231

#제출 시각아이디문제언어결과실행 시간메모리
673231Hacv16Jelly Flavours (IOI20_jelly)C++17
0 / 100
15 ms21200 KiB
#include <bits/stdc++.h>
#include "jelly.h"
using namespace std;
 
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
 
#define fr first
#define sc second

const int MAX = 2005;
const int INF = 0x3f3f3f3f;
int n, a[MAX], b[MAX];
 
int find_maximum_unique(int x, int y, vector<int> _a, vector<int> _b) {
	n = _a.size();
	
	vector<pair<int, int>> aux;

	for(int i = 0; i < n; i++)
		aux.emplace_back(_a[i], _b[i]);

	sort(aux.begin(), aux.end());

	vector<vector< pair<int, int> >> dp(n + 1, vector< pair<int, int> >(y + 1));

	dp[0][0] = {0, x};

	for(int t = 1; t <= y; t++)
        dp[0][t] = {-INF, -INF};

	int ans = 0;

	for(int i = 1; i <= n; i++){
		for(int j = 0; j <= y; j++){
			dp[i][j] = dp[i - 1][j];

			if(dp[i][j].sc >= _a[i - 1]){
				dp[i][j].fr++;
				dp[i][j].sc -= a[i - 1];
			}

			if(j >= _b[i - 1]){
				pair<int, int> tmp = dp[i - 1][j - _b[i - 1]];
				tmp.fr++;

				if(tmp.fr > dp[i][j].fr || (tmp.fr == dp[i][j].fr && tmp.sc > dp[i][j].sc))
					dp[i][j] = tmp;
			}

			ans = max(ans, dp[i][j].fr);
		}
	}
 
	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...