제출 #1216362

#제출 시각아이디문제언어결과실행 시간메모리
1216362trimkusLet's Win the Election (JOI22_ho_t3)C++20
61 / 100
2594 ms12316 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;


int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n, k;
	cin >> n >> k;
	//~ cerr << "A\n";
	vector<array<ld, 2>> a(n);
	int cnt = 0;
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < 2; ++j) {
			cin >> a[i][j];	
		}
		cnt += (a[i][1] != -1);
		swap(a[i][0], a[i][1]);
	}
	sort(begin(a), end(a));
	ld res = LLONG_MAX;
	auto chmin = [&](ld& x, ld y) -> void {
		x = min(x, y);
	};
	//~ cerr << "a\n";
	for (int take = 0; take <= min(k, cnt); ++take) {
		vector<vector<vector<ld>>> dp(2, vector<vector<ld>>(n + 1, vector<ld>(n + 1, 1e18)));
		dp[0][0][0] = 0;
		for (int j = 0; j < n; ++j) {
			int p = j & 1;
			for (int l = 0; l <= k; ++l) {
				for (int z = 0; z <= min(take, l); ++z) {
					dp[p ^ 1][l][z] = dp[p][l][z];
					if (l > 0) {
						chmin(dp[p ^ 1][l][z], dp[p][l - 1][z] + a[j][1] / (take + 1));
					}
					if (a[j][0] != -1 && z > 0) {
						assert(l > 0);
						chmin(dp[p ^ 1][l][z], dp[p][l - 1][z - 1] + a[j][0] / z);
					}
				}
			}
		}
		//~ cerr << take << " " << k << "\n";
		res = min(res, dp[n & 1][k][take]);
	}
	cout << fixed << setprecision(3) << res << "\n";
}

#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...