solution

求めるのは、与えられた$P$に対し、

  • $\min f(x) = x + \frac{p}{2^{\frac{x}{1.5}}}$
  • $\text{sub to} \; $x \ge 0$

下に凸っぽさがあるので、三分探索する。 初期区間は適当につくる。

implementation

#!/usr/bin/env python3
p = float(input())
def f(x):
    return x + p / pow(2, x / 1.5)
def ternary_search():
    l = 0
    r = 0
    while f(r) > f(r+1):
        r += 1
    r += 1
    for _ in range(1000):
        ml = (l + l + r) / 3
        mr = (l + r + r) / 3
        if f(ml) < f(mr):
            r = mr
        else:
            l = ml
    return f(l)
print(ternary_search())