• BUAA_1321 逃课(DP)


    描述

    在一个星期三的早上,某同学想用扔硬币的方式来决定是否要去上算法课。

    他扔 n 次硬币,如果当中有连续 m 次以上(含 m 次)的结果都是正面,那么他就去上课,否则就接着睡觉。(假设每次扔硬币扔出的正反两面的概率都是 0.5。)

    输入

    输入的每行有一组数据,分别为 n  m (0 < n <= 2000, 0 < m <= 10)。输入以 0 0 结尾。

    输出

    对于每组数据,输出他去上课的概率,四舍五入保留小数点后 2 位。

     

      今天队友问我这个题,说是dp的问题。悲摧的开始看错题意了,题目让找连续m次以上的概率。开始思路是建立一个2维dp[i][j],表示仍i次硬币出现j次连续正面朝上的概率。但后来发现实现不了。问大牛说可以用自动机dp做,表示我从来没有看过自动机。后来看了解题报告,我晕,原来只要一个一维的数组dp[i]表示仍i次出现连续m个正面的概率。

    当第i-1次时已经出现过连续m次,则dp[i] = dp[i-1];

    当前边出现连续的m-1次正面,第m个正面出现在i位置时,从i-1到i-m都是正面,所以第i-m-1位置为反面,i-m-1之前的出现m个连续串的概率为dp[i-m-1],既得,不出现连续m的概率为1-dp[i-m-1];

    所以,状态转移方程为 dp[i] = dp[i-1] + (1-dp[i-m-1]*0.5^(m+1));

    当然,可以考虑一下集中特殊情况,不过对这个公式没有影响。


    ps:dp还是太水了,随便一道题都可以虐我。。。。T_T,过段时间系统的看一看dp,包括算法+黑书+各种资料。

  • 相关阅读:
    Java 读取某个目录下所有文件、文件夹
    poi根据excel模板导出Excel
    UML关系(泛化,实现,依赖,关联(聚合,组合))
    使用Git下载Hadoop的到本地Eclipse开发环境
    maven command to create your application
    Roo中的@Version
    oracle 给用户赋表空间
    hiberante 二级缓存设置
    procedure
    Oracle综合数据库管理命令集
  • 原文地址:https://www.cnblogs.com/vongang/p/2259306.html
Copyright © 2020-2023  润新知