zoukankan      html  css  js  c++  java
  • 6-1 Numerical Summation of a Series

    题意

    [phi(x) = sum_{k = 1} ^ {infty} frac{1}{k(k + x)} ]

    (phi(0.0), phi(0.1), ..., phi(300.0)),保证绝对误差不超过 ({10} ^ {-10}),时间限制 100 ms.

    分析

    一种简单暴力的想法是设置一个阈值 (T):对 (k le T),直接暴力累加;对 (k > T),直接估计。然而,在指定的时间内,不管如何设置 (T),精度都远远不够。

    考虑对 (phi(x)) 做一些转化,使得转化后的对象 (mu(x)) 收敛得更快,对转化后的对象 (mu(x)) 用相同的方法计算,然后再根据 (phi(x))(mu(x)) 的关系,计算得到 (phi(x))

    注意到

    [phi(1) = sum_{k = 1} ^ {infty} frac{1}{k(k + 1)} = 1 ]

    (phi(x)) 作转化:令 (phi(x)) 减去 (phi(1)),得

    [phi(x) - phi(1) = (1 - x)sum_{k = 1} ^ {infty} frac{1}{k(k + 1)(k + x)} = (1 - x) mu(x) ]

    然而这样还是过不了。

    正解的做法应该是对 (mu(x)) 继续进行变换,然而我又变换了三四次,依然无法满足题意要求,误差还越来越大(我猜测这是因为对转化量的的要求越来越高)。

    只能去考虑对于不同的 (x)(phi(x)) 之间存在什么联系。

    先对 (phi(x)) 进行裂项转化:

    [phi(x) = sum_{k = 1} ^ {infty} frac{1}{k(k + x)} = frac{1}{x} sum_{k = 1} ^ {infty} (frac{1}{k} - frac{1}{k + x}) ]

    [phi(x + 1) = sum_{k = 1} ^ {infty} frac{1}{k(k + x + 1)} = frac{1}{x + 1} sum_{k = 1} ^ {infty} (frac{1}{k} - frac{1}{k + x + 1}) ]

    那么有

    [xphi(x) = (x + 1)phi(x + 1) - frac{1}{1 + x} ]

    观察得知 (phi) 越小,我们的方法计算精度越高。于是我们可以设置更大的阈值 (T),更精确地计算 (phi(0.0, 0.1, 0.2, ..., 0.9)),然后根据上面的等式关系,推出所有的解。

  • 相关阅读:
    AGC 018E.Sightseeing Plan(组合 DP)
    BZOJ.4767.两双手(组合 容斥 DP)
    AGC 001E.BBQ Hard(组合 DP)
    洛谷.3960.列队(线段树/树状数组)
    Codeforces Round #514 (Div. 2)
    10.4 正睿国庆集训测试 青岛
    Codeforces.264E.Roadside Trees(线段树 DP LIS)
    BZOJ.4653.[NOI2016]区间(线段树)
    Ansible安装部署以及常用模块详解
    Linux系统诊断必备技能之二:tcpdump抓包工具详解
  • 原文地址:https://www.cnblogs.com/Sdchr/p/14658423.html
Copyright © 2011-2022 走看看