Submission #1014323

#TimeUsernameProblemLanguageResultExecution timeMemory
1014323aykhnCarnival Tickets (IOI20_tickets)C++17
27 / 100
340 ms90588 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; #define inf 0x3F3F3F3F3F3F3F3F long long find_maximum(int k, vector<vector<int>> x) { assert(k == 1); int n = x.size(); int m = x[0].size(); vector<vector<int>> answer(n, vector<int> (m, -1)); vector<vector<long long>> dp(n, vector<long long> (n / 2 + 5, -inf)), par(n, vector<long long> (n / 2 + 5, -1)); dp[0][0] = -x[0][0], dp[0][1] = x[0][m - 1]; par[0][0] = 0, par[0][1] = 0; for (int i = 1; i < n; i++) { for (int j = 0; j <= n / 2; j++) { if (j) { if (dp[i - 1][j] - x[i][0] > dp[i - 1][j - 1] + x[i][m - 1]) { dp[i][j] = dp[i - 1][j] - x[i][0]; par[i][j] = j; } else { dp[i][j] = dp[i - 1][j - 1] + x[i][m - 1]; par[i][j] = j - 1; } } else { dp[i][j] = dp[i - 1][j] - x[i][0]; par[i][j] = j; } } } int i = n - 1, j = n / 2; while (i >= 0) { if (par[i][j] == j) answer[i][0] = 0; else if (par[i][j] == j - 1) answer[i][m - 1] = 0; else assert(0); j = par[i][j]; i--; } allocate_tickets(answer); return dp[n - 1][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...