题目链接:https://code.google.com/codejam/contest/9234486/dashboard#s=p1
有n个数,允许k次“取一个数再放回重新取”的操作,一个人希望拿到最大的那个数字。求取到数字最大的期望。
k=0时,期望就是均值,即E0=1n∑ni=0vi。
k=1时,每取到一个数可以有一次机会选择是否放回,但是期望拿到数字最大,因此要选取比k=0时期望大的数,E1=1n∑ni=1max(vi,E0)。
可以推广:Ek=1n∑ni=1max(vi,Ek−1)。
假设计算Ek时,有t个数字使得Ek−1比vi大,那么就有n−t个数使Ek−1比vi小,他们的对Ek的贡献分别是tEk−1和∑v<Ek−1v。我们可以对v排序,前者的t可以二分得到,后者可以维护一个前缀和。
1 |
|
v1.5.2