Submission #1291686

#TimeUsernameProblemLanguageResultExecution timeMemory
1291686SofiatpcCarnival Tickets (IOI20_tickets)C++20
27 / 100
277 ms66296 KiB
#include "tickets.h"
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1505;
int mn[MAXN], mx[MAXN];
long long dp[MAXN][MAXN];

long long find_maximum(int k, vector<vector<int>> x) {
	int n = x.size(), m = x[0].size();

	vector<vector<int>> ans(n);
	for (int i = 0; i < n; i++) {
		ans[i].resize(m);
		for (int j = 0; j < m; j++)ans[i][j] = -1;
	}

	for(int i = 0; i < n; i++){
		mn[i] = 0; mx[i] = 0;
		for(int j = 0; j < m; j++){
			if(x[i][mn[i]] > x[i][j]) mn[i] = j;
			if(x[i][mx[i]] < x[i][j]) mx[i] = j;
		}
	}

	dp[n][0] = 0;
	for(int j = 1; j <= n/2; j++)dp[n][j] = -1e16;

	for(int i = n-1; i >= 0; i--)
		for(int j = 0; j <= n/2; j++){
			dp[i][j] = -1e16;
			if(j > 0)dp[i][j] = max(dp[i][j], dp[i+1][j-1] - x[i][mn[i]]);
			if(n-i-j > 0)dp[i][j] = max(dp[i][j], dp[i+1][j] + x[i][mx[i]]);
		}

	int j = n/2;
	for(int i = 0; i < n; i++){
		if(dp[i][j] == dp[i+1][j-1] - x[i][mn[i]]){
			ans[i][mn[i]] = 0;
			j--;
		}else ans[i][mx[i]] = 0;
	}

	allocate_tickets(ans);
	return dp[0][n/2];
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...