• Problem. F


    题意简述:

    初始时你有(0)元钱和(n)次机会,每次你可以进行两种选择:
    (1.)退出:拿着现在有的所有钱走人。
    (2.)继续:此时有(p)的概率可以获得(1)元钱,有(1-p)的概率失去现在有的所有钱并消耗一次机会。
    当剩余机会为(0)的时候游戏强制结束。
    求在最大化期望收益的策略下的期望收益,不考虑精度误差。

    数据范围:

    (1le nle5*10^6)

    解法:

    首先考虑(n=1)的情况。
    很显然我们此时的策略是这样的:一直继续,直到当前手上有(p_1)的钱就退出。
    那么我们要计算的就是(f_1(x)=p^xx(xinmathbb N))的最大值。
    (Delta f_1(x)=p^x(px+p-x))
    很显然(Delta f_1(x))是一个单调递减的函数,因此我们可以直接求出它的零点为(t=frac p{1-p})
    由此得出(p_1=lceil t ceil),期望收益(s_1=f_1(p_1))
    然后考虑(n=i)的情况,那么我们此时的策略与(n=1)的时候是非常相似的:一直继续,直到当前手上有(p_i)的钱就退出。
    注意到如果我们失去了所有的钱,那么我们将递归进入(n=i-1)的情况,此时的期望收益为(s_{i-1})
    那么我们要计算的就是(f_i(x)=p^xx+(1-p^x)s_{i-1}(xinmathbb N))的最大值。
    类似于(n=1)的情况,(Delta f_i(x))仍是一个单调递减的函数,因此我们可以直接求出它的零点为(s_{i-1}+t)
    由此得出(p_i=lceil t+s_{i-1} ceil,s_i=f_i(p_i))
    这样我们就可以递推得到(s_n)了。
    时间复杂度为(O(nlog n)),其中(log n)为计算快速幂的复杂度。

  • 相关阅读:
    [LA7139 Rotation(2014 shanghai onsite)]二维树状数组
    [hdu3068 最长回文]Manacher算法,O(N)求最长回文子串
    《机器学习技法》---GBDT
    《机器学习技法》---支持向量回归
    《机器学习技法》---随机森林
    《机器学习技法》---决策树
    《机器学习技法》---AdaBoost算法
    《机器学习技法》---模型聚合
    ubuntu禁止系统自动升级之界面操作
    python之迭代
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12300487.html
Copyright © 2020-2023  润新知