zoukankan      html  css  js  c++  java
  • BZOJ1426

     以下摘自BraketBN,Orz

    参考【pygbingshen的题解】,推了一晚上终于推出来了。

    注意题意指的是,第i次买的时候价钱为i,不是编号为i的邮票价钱为i(否则样例应该是11...)。

    设g[i]表示已经收集了i张邮票,要收集到n张邮票的期望购买次数。

    设pr(x, i)表示已经收集了i张邮票,购买x次能收集到n张邮票的概率。

    那么根据g[i]定义,有

    (pr(x, i)是可以表示出来的,但是表示出来也没有实际用处,所以为了方便,设为pr(x, i))

    但是我们计算g[i]并不能用定义式,因为是无穷的,而且过于麻烦。

    其实g[i]的问题是一类经典问题,这类问题的解决方法是递推。

    由结论,有

    这里证明一下为什么是加n / (n - i)...

    假设现在有i张邮票,那么可以通过

    (1)抽一次得到i + 1张邮票,期望为1 * (n - i) / n

    (2)抽两次得到i + 1张邮票,期望为2 * i / n * (n - i) / n

    (3)抽三次得到i + 1张邮票,期望为3 * (i / n)^2 * (n - i) / n

    (4)...

    显然是一个无穷级数,相当于求

    这个式子用错位相减法搞一搞,求出来就是n / (n - i),高中数学内容就不详细说了...

    那么现在可以求出g[i]了,先把这个数组放一边,一会用。

    设f[i][j]表示已经收集了i张邮票,买下一张邮票需要花费j元,收集到n张的期望花费。

    那么有两种情况

    (1)没收集到i + 1张邮票,期望为f[i][j + 1] * i / n

    (2)收集到了i + 1张邮票,期望为f[i + 1][j + 1] * (n - i) / n

    花费都为j,得到

    但是这还是个无穷的表达式(j会非常大),并不能直接拿去用。

    利用f[i][j]的定义,再列出一个定义式。

    (这个定义式有点神奇...)

    根据这个整理后的定义式,列出f[i][j + 1],并作差,可以得到

    发现这玩意"恰好"就是g[i]。

    我们把f[i][j + 1]代入到上面推出的递推式里,整理一下。

    变成了一个方程,把f[i][j]表示出来。

    然后就可以递推了?等会,注意到f[i][j]里还有个j,我们该开多大数组?然后再看看,发现除过j,没有用到其他的值(比如j+1, j+2, j-1啥的),整个式子里只有j这一维。

    显然我们要求的是f[0][1],所以我们把j都变成1就好了,这样就不用第二维了。

    完啦。答案为f[0]。

    /* Footprints In The Blood Soaked Snow */
    #include <cstdio>
    
    typedef double DB;
    
    const int maxn = 10005;
    
    int n;
    DB g[maxn], f[maxn];
    
    int main() {
    	scanf("%d", &n);
    	g[n] = 0;
    	for(int i = n - 1; i >= 0; i--)
    		g[i] = g[i + 1] + n /(DB)(n - i);
    	f[n] = 0;
    	for(int i = n - 1; i >= 0; i--)
    		f[i] = (n + g[i] * i + (f[i + 1] + g[i + 1]) * (n - i)) /(DB)(n - i);
    	printf("%.2lf
    ", f[0]);
    	return 0;
    }
    

    代码比较短,过程比较长。

  • 相关阅读:
    C# 从服务器下载文件
    不能使用联机NuGet 程序包
    NPOI之Excel——合并单元格、设置样式、输入公式
    jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
    UVA 10519 !! Really Strange !!
    UVA 10359 Tiling
    UVA 10940 Throwing cards away II
    UVA 10079 Pizze Cutting
    UVA 763 Fibinary Numbers
    UVA 10229 Modular Fibonacci
  • 原文地址:https://www.cnblogs.com/Var123/p/5347948.html
Copyright © 2011-2022 走看看