#include <bits/stdc++.h>
#include <ios>
#include <iostream>
#include <set>
#include <random>
using namespace std;
using ll = double;
using P = pair<double, double>;
#define f first
#define s second
const ll MOD = 1e9+7;
const ll inf = 4*1e18;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
long long md(long long a, long long m) {
return (a % m + m) % m;
}
int main() {
// freopen("input.in", "r", stdin);
ios::sync_with_stdio(false); cin.tie(nullptr);
ll n, k; cin >> n >> k;
vector<P> v;
for (int i = 0; i < n; i++) {
ll x, y; cin >> x >> y;
v.push_back({((y==-1) ? 1e9 : y), x});
}
sort(v.begin(), v.end());
for (int i = 0; i < n; i++) {
ll tmp = v[i].f;
v[i].f = v[i].s;
v[i].s = tmp;
if (v[i].s == 1e9) v[i].s = -1;
}
ll M = 1e9;
for (int i = 0; i <= k; i++) {
vector<ll> dp1(i+1, 1e9);
dp1[0] = 0;
for (int j = 0; j < n; j++) {
vector<ll> dp2(i+1, 1e9);
for (int l = 0; l <= i; l++) {
ll c = k - i;
if (l < i) {
dp2[l+1] = min(dp2[l+1], dp1[l] + v[j].f/(c+1));
}
if (j-l < c) {
if (v[j].s != -1) {
dp2[l] = min(dp2[l], dp1[l] + v[j].s/(j+1-l));
}
} else {
dp2[l] = min(dp2[l], dp1[l]);
}
}
dp1.swap(dp2);
}
M = min(M, dp1[i]);
}
cout << M;
}
| # | 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... |