Submission #922063

#TimeUsernameProblemLanguageResultExecution timeMemory
922063cthbstLet's Win the Election (JOI22_ho_t3)C++14
0 / 100
1899 ms4672 KiB
#include <algorithm> #include <iomanip> #include <iostream> #include <utility> #include <vector> #define int long long #define F first #define S second #define sz(v) (int)v.size() using namespace std; const int maxn = (int)505; const int INF = (int)1e18 + 5; int n, k; pair<double, double> ar[maxn]; double dp[maxn][maxn]; double List[maxn][maxn]; double f(int s, int cnt) { if (s < 0 || cnt < 0) return INF; if (List[s][cnt] != 0) return List[s][cnt]; vector<int> v; for (int i = s; i <= n; i++) { v.push_back(ar[i].F); } sort(v.begin(), v.end()); if (cnt > sz(v)) return List[s][cnt] = INF; double rtn = 0; for (int i = 0; i < cnt; i++) { rtn += v[i]; } return List[s][cnt] = rtn; } double myDP(int x) { dp[1][0] = ar[1].F / (x + 1); dp[1][1] = ar[1].S / 1.0; for (int j = 2; j <= x; j++) dp[1][j] = INF; for (int i = 2; i <= n; i++) { dp[i][0] = dp[i - 1][0] + ar[i].F / (x + 1); for (int j = 1; j <= x; j++) { if (j > i) dp[i][j] = INF; else { double A = dp[i - 1][j] + ar[i].F / (x + 1); double B = dp[i - 1][j - 1] + ar[i].S / j; dp[i][j] = min(A, B); } } } double rtn = INF; for (int i = 1; i <= n; i++) { rtn = min(rtn, dp[i][x] + f(i + 1, k - x) / (x + 1)); } return rtn; } void solve() { cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> ar[i].F >> ar[i].S; if (ar[i].S == -1) ar[i].S = INF; } sort(ar + 1, ar + 1 + n, [](auto &a, auto &b) { if (a.S == b.S) return a.F < b.F; return a.S < b.S; }); // cout << "ar : \n"; // for (int i = 1; i <= n; i++) cout << ar[i].F << ' ' << ar[i].S << '\n'; // cout << '\n'; double an = INF; for (int x = 0; x <= n; x++) { an = min(an, myDP(x)); } cout << fixed << setprecision(15) << an << '\n'; } signed main() { ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); solve(); 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...