zoukankan      html  css  js  c++  java
  • UR#19 通用评测号

    网上看到的一种写法

    原博客链接(后面写法会有点不一样)

    原问题可以变成:

    有n个容量无限大的燃料箱,每次随便放(达到A了仍然可以继续放),当所有燃料都达到B时结束。求燃料箱所放燃料(ge A)的期望数量。

    正确性:

    首先,期望只与终态有关。那么,对于一个燃料(ge A)的箱子,我再往里放一个的话,并不会改变其他燃料(<A)的状态。因此,此次操作并不会对状态产生影响。那么这个转化是正确的。


    根据期望的线性性质,每个燃料箱的贡献为1,那么就是其(ge A)的概率。而每个燃料箱是等价的,我们把概率(× n)就是答案了。

    考虑燃料箱有贡献的情形:其刚好达到(A),并且其余燃料箱存在至少一个燃料小于(B)

    显然,我们算出其余都(ge B)的概率,然后拿1减去就好了。

    可以发现,如果一个燃料箱已经(ge B)了,再往里放一个并不会改变其他燃料(<B)的状态。所以,当一个燃料箱达到B时,我们就假定它损坏了,不能往里面加燃料了。

    考虑dp,记(dp[i][j])表示此时已有(i)个燃料箱达到(B),总共加入的次数为(j)的概率。

    转移:

    [dp[i][j]=dp[i][j]+frac{dp[i][j-1]}{n-i}\ dp[i][j]=dp[i][j]+frac{dp[i-1][j-1]}{n-i+1}cdot C_{j-1-(i-1)cdot B}^{B-1} ,ige 1 ]

    那么((1-(n-1)!cdot dp[n-1][(n-1)cdot B+A-1])cdot n)就是答案了。

    对于dp部分的一些解释:

    首先,第一条转移方程,注意的是,我们并不是真的的往燃料箱里塞燃料,而是预留一个塞燃料的操作,由于只能选择一个点,所以概率要除以(n-i)

    第二条转移方程,我们把第(j)个操作并且在前面(j-1-(i-1)cdot B)预留操作中选择(B-1)个,把其塞满。

    至于乘上((n-1)!)的话,很显然,我们是按顺序一个一个塞满的。

  • 相关阅读:
    AD域服务器的部署 【1】— AD域介绍
    Docker 设置http代理
    在Django中将SQLite3数据库迁移到MySQL
    pycharm远程更新代码到远端服务器
    这个看着更好。Docker中使用MySQL
    docker换成最好用的源
    docker基础命令
    在docker中运行mysql实例
    centos7安装mysql
    centos 7 修改ip
  • 原文地址:https://www.cnblogs.com/SillyTieT/p/13493046.html
Copyright © 2011-2022 走看看