CF739E Gosha is hunting

传送门:http://codeforces.com/contest/739/problem/E

题意:n个小精灵,a个宝贝球,b的大师球,每个小精灵可以用宝贝球或大师球或两个球捕捉,成功概率为$p_i,u_i$求期望最大捕捉数

非常厉害而且有趣的做法

考虑一个凸函数$f(x)$,现在有一个黑箱可以求它的极大值点,那么如何计算任意一个点$f(x_0)$的值?
构造函数$F(x)=f(x)-kx$,显然F也是凸函数,并且我们假设也能求它的极大值点,而且注意到k越大,极大值点就会越向左移
那么就可以二分k,使得$F(x)$的极大值点为$x_0$,就得到了$f(x_0)=F(x_0)+kx_0$
回到原问题,我们令$f[i][j](k)$表示前i个点用j个宝贝球k个大师球的期望,显然关于k这个函数是凸函数
按照上述方法就可以快速求出f[n][a][b]了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注