Submission #1201895

#TimeUsernameProblemLanguageResultExecution timeMemory
1201895ofozLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
737 ms2460 KiB
#include <iostream> #include <vector> #include <algorithm> #include <limits> #include <cmath> using namespace std; int n, k; vector<int> start, endt; vector<vector<int>> sm; double dp(int i, int col, int mxCol, vector<vector<double>>& memo) { if (col == mxCol) { if (k - i < 0 || k - i > n) return numeric_limits<double>::infinity(); return static_cast<double>(sm[i][k - i]) / (mxCol + 1); } if (i == n) return numeric_limits<double>::infinity(); if (memo[i][col] != -1) return memo[i][col]; double x = dp(i + 1, col + 1, mxCol, memo) + (static_cast<double>(endt[i]) / (col + 1)); double y = dp(i + 1, col, mxCol, memo) + (static_cast<double>(start[i]) / (mxCol + 1)); memo[i][col] = min(x, y); return memo[i][col]; } double f(int col) { vector<vector<double>> memo(n + 1); for (int i = 0; i <= n; i++) { memo[i] = vector<double>(i+1, -1); } return dp(0, 0, col, memo); } int main() { cin >> n >> k; start.resize(n); endt.resize(n); vector<pair<int, int>> pairs(n); for (int i = 0; i < n; ++i) { int a, b; cin >> a >> b; if (b == -1) b = numeric_limits<int>::max(); pairs[i] = {a, b}; } sort(pairs.begin(), pairs.end(), [](const pair<int, int>& p1, const pair<int, int>& p2) { if (p1.second != p2.second) return p1.second < p2.second; return p1.first > p2.first; }); for (int i = 0; i < n; ++i) { start[i] = pairs[i].first; endt[i] = pairs[i].second; } sm.assign(n + 1, vector<int>(n + 1, 0)); for (int i = n - 1; i >= 0; --i) { for (int c = 1; c <= n; ++c) { if ((n - i) < c) { sm[i][c] = numeric_limits<int>::max(); continue; } if (i == n - 1) { sm[i][c] = start[i]; } else { if (sm[i + 1][c - 1] == numeric_limits<int>::max()) sm[i][c] = sm[i + 1][c]; else sm[i][c] = min(sm[i + 1][c - 1] + start[i], sm[i + 1][c]); } } } double res = numeric_limits<double>::infinity(); int l = 0, r = n; for (int mxCol = 0; mxCol <= n; ++mxCol) { res = min(res, f(mxCol)); } cout << fixed << res << endl; return 0; }
#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...