zoukankan      html  css  js  c++  java
  • 【loj6342】跳一跳 期望dp

    题目描述

    一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一。求从 $1$ 跳到 $n$ 的期望步数。

    $nle 10^7$ 。


    题解

    期望dp傻逼题

    设 $f[i]$ 表示从 $i$ 跳到 $n$ 的期望步数,那么有 $f[i]=frac{sumlimits_{j=i}^n f[j]}{n-i+1}+1=frac{sumlimits_{j=i+1}^nf[j]}{n-i}+1$ ,维护后缀和转移即可。

    时间复杂度 $O(n)$ 

    由于卡内存,因此逆元必须用int存储, $f$ 和 $s$ 需要使用滚动数组。

    #include <cstdio>
    #define N 10000010
    #define mod 1000000007
    int inv[N];
    int main()
    {
    	int n , i;
    	long long f , s = 0;
    	scanf("%d" , &n);
    	inv[1] = 1;
    	for(i = 2 ; i <= n ; i ++ ) inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
    	for(i = n - 1 ; i ; i -- ) f = ((s + 1) * inv[n - i] + 1) % mod , s = (s + f) % mod;
    	printf("%lld
    " , f);
    	return 0;
    }
    
  • 相关阅读:
    redux
    ajax跨域例子
    flux
    BSON数据格式
    JS代码风格自动规整工具Prettier
    JS通用模块模式 UMD
    Promise库
    webpack打包理解
    前端自动提示功能插件-typeahead
    socket.io emit callback调用探秘
  • 原文地址:https://www.cnblogs.com/GXZlegend/p/8625991.html
Copyright © 2011-2022 走看看