zoukankan      html  css  js  c++  java
  • COJ16G

    Comet OJ 16 G

    (a_0=1),对于 (1sim n) 中的每个 (i),在 ([0,i)) 中随机 (k) 个非负整数 (p_1,p_2...p_k)(a_i=sum a_{p_j})

    你需要计算 (a_n^k) 的数学期望。

    (nle 10^5,kle 10)

    Solution

    对上述问题做组合转换:问题等价于先确定所有点的连边情况(注意边带标号),然后计算从 (0) 处出发的 (k) 条带标号流量流至 (n) 处的方案数(两种方案不同当且仅当任意一条带标号流流动的方式不同)

    于是考虑在钦定一种流法之后计算答案,此时枚举位置 (i),则位置 (i) 处的贡献仅关乎其可以连向外部的边数。

    不难考虑到对答案的贡献产生变换的部分来自于相同的点流向相同的点的过程,于是我们只需要知道一种 (k) 个点的集合划分(同处集合表示两者位于同一个点),然后考虑选定其中的一个子集使其流向 (i) 处,来自相同集合的点可能共用相同的边,并在此时计算方案数即可。

    初步的暴力实现是 (mathcal O(ncdot extrm{Bell}(k)cdot 2^k)) 的算法,可以优化到不同的复杂度。

    不难注意到 (k) 个节点是本质相同的,一个集合划分对答案的贡献是无序的(或者说节点允许任意排布均是相同的)

    于是我们只需要预处理一种集合划分(拆分数)向另一种集合划分(拆分数)处转移时的方案数即可,附带的,我们需要计算其 (i-本质不同出边) 的和。

    此时可以做到 (mathcal O(ncdot k ho(k)^2))

    事实上,有效的转移并没有达到 ( ho(k)) 的级别,我们预处理所有有效的转移即可做到 (mathcal O(f(k)cdot n+S(k))) 的复杂度。其中 (f(k)) 表示有效的转移数,(S(k)) 表示预处理的时候暴搜转移数的复杂度代价,可以近似认为是 ( ho(k)cdot 3^{frac{2}{3}k}cdot k)(当然这是上界,实际上小得多)

  • 相关阅读:
    [图解算法] 最短路径算法之 “Dijikstra”
    [前端随笔][CSS] 伪类的应用
    [前端随笔][JavaScript] 实现原生的事件监听<Vue原理>
    [图解算法] 最短路径算法之 “Floyd”
    [前端随笔][JavaScript][自制数据可视化] “中国地图”
    [前端随笔][JavaScript] 懒加载的实现(上划一次加载一部分)
    [前端随笔][CSS] 制作一个加载动画 即帖即用
    ThinkPHP下隐藏index.php以及URL伪静态
    PHP基础语法3
    PHP基础语法2
  • 原文地址:https://www.cnblogs.com/Soulist/p/14375847.html
Copyright © 2011-2022 走看看