n = int(input())
k = int(input())
start = [0] * n
end = [0] * n
pairs = []
for i in range(n):
a, b = map(int, input().split(" "))
if b == -1: b = float('inf')
pairs.append((a, b))
pairs = sorted(pairs, key = lambda p: (p[1], -p[0]))
for i, (a, b) in enumerate(pairs):
start[i] = a
end[i] = b
memo = [[[-1] * (n+1) for _ in range(n+1)] for _ in range(n+1)]
def dp(i: int, col: int, k: int, mxCol: int):
if col == 0 and k == 0: return 0
if col > k or i < 0 or col < 0: return float('inf')
if memo[i][col][k] != -1: return memo[i][col][k]
x = float('inf')
if col: x = dp(i-1, col-1, k-1, mxCol) + (end[i]/col)
y = dp(i-1, col, k-1, mxCol) + (start[i]/(mxCol+1))
z = dp(i-1, col, k, mxCol)
memo[i][col][k] = min(x, y, z)
return memo[i][col][k]
res = float('inf')
for col in range(n):
res = min(res, dp(n-1, col, k, col))
memo = [[[-1] * (n+1) for _ in range(n+1)] for _ in range(n+1)]
print(res)
# let dp[i][col][k] be the minimum amount of time to get col collaborators with k voters up to the i-th point.
# dp[i][col][k] = min(
# dp[i-1][col-1][k-1] + b_i/(col+1),
# dp[i-1][col][k-1] + a_i/(mxCol+1),
# dp[i-1][col][k],
# )
# dp[i][0][0] = 0 for all i
Compilation message (stdout)
Compiling 'Main.py'...
=======
adding: __main__.pyc (deflated 52%)
=======
# | 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... |