#include <bits/stdc++.h>
#define int long long
const int MAXN = 502;
long double dp[MAXN][MAXN];
signed
main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int n, k;
std::cin >> n >> k;
std::vector<std::pair<int, int>> all(n);
for (int i = 0; i < n; i++)
{
std::cin >> all[i].first >> all[i].second;
if (all[i].second == -1)
{
all[i].second = 1e13;
}
}
std::sort(all.begin(), all.end(), [&](std::pair<int, int> a, std::pair<int, int> b)
{ return a.second < b.second; });
long double min = 1e18;
for (int i = 0; i <= k; i++)
{
for (int j = 0; j <= n; j++)
{
for (int z = 0; z <= n; z++)
{
dp[j][z] = 1e9;
}
}
dp[0][0] = 0;
for (int j = 1; j <= n; j++)
{
for (int z = 0; z <= std::min(k - i, j); z++)
{
int first = std::min((j - z), i);
if (z > 0)
{
dp[j][z] = std::min(dp[j][z], dp[j - 1][z - 1] + (long double)(all[j - 1].first) / (long double)(i + 1));
}
if ((j - 1 - z) < i)
{
dp[j][z] = std::min(dp[j][z], dp[j - 1][z] + (long double)(all[j - 1].second) / (long double)(first));
}
else
{
dp[j][z] = std::min(dp[j][z], dp[j - 1][z]);
}
// std::cout << dp[j][z] << ' ' << j << ' ' << z << ' ' << std::min(k - i, j) << std::endl;
}
}
// std::cout << dp[n][k - i] << std::endl;
min = std::min(min, dp[n][k - i]);
}
std::cout << std::setprecision(10) << std::fixed << min;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |