题意:

你现在要打\(n\)个字符,但是程序随时可能会崩溃。

你可以在恰当的时机按下 \(Ctrl-S\)键,崩溃后,会从最后一次保存的情况继续开始打字。

具体是这样的:

  • 在每个第\(i-0.1s(i>0)\)的时候,程序崩溃的概率为\(p\)
  • 在每个第\(is(i \geq 0)\)的时候,你可以一口气按下\(x\)个键来存盘
  • 在每个第\(i+0.1s(i \geq 0)\)的时候,你可以按下一个键来打字

求采取最优策略下,打完这\(n\)个字符,并且最后存盘,总按键次数的期望。

分析:

先不考虑可以存盘的情况,设\(d(i)\)为打印\(i\)个字符按键次数的期望。

有递推公式:\(d(i)=d(i-1)+1+p \cdot d(i)\)

当你打印出前\(i-1\)个字符,刚刚打完第\(i\)个的时候:

  • 有概率\(p\)会崩掉,这时候要重新开始,还需要的按键数的期望为\(d(i)\)
  • 有概率\(1-p\)没崩,打印完成了

化简一下得到:\(d(i)=\frac{1}{1-p}d(i-1)+\frac{1}{1-p}\)

然后再考虑存盘的情况,我们枚举存了\(x\)次盘,也就是把这\(n\)个字符分为\(x\)段,每打完一段就存一次盘。

由于\(\frac{1}{1-p}>1\),可以看出\(d(n)\)是指数型增长的,所以就尽可能均匀地把\(n\)个字符分成\(x\)段。

或者也可以求一下\(d(n)\)的通项公式为:\(d(n)=\frac{1}{p(1-p)^n}-\frac{1}{p}\)来验证。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = 100000 + 10;
const double INF = 1e20;
double d[maxn]; int main()
{
int T; scanf("%d", &T);
for(int kase = 1; kase <= T; kase++) {
int n, x; double p;
scanf("%d%lf%d", &n, &p, &x); d[0] = 0;
for(int i = 1; i <= n; i++) d[i] = (d[i - 1] + 1.0) / (1.0 - p); double ans = INF;
for(int i = 1; i <= n; i++) {
int k = n / i, r = n % i;
ans = min(ans, r*d[k+1] + (i-r)*d[k] + i*x);
} printf("Case #%d: %.6f\n", kase, ans);
} return 0;
}

HDU 5236 Article 期望的更多相关文章

  1. hdu 5236 Article 概率dp

    Article Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5236 ...

  2. HDU 5236 Article(概率DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=5236 题意:现在有人要在文本编辑器中输入n个字符,然而这个编辑器有点问题. 在i+0.1s(i>=0)的时 ...

  3. hdu 5236 Article(概率dp¥)

    Article Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. HDU 5236 Article (概率DP+贪心)

    题意:要求输入一篇N个字符的文章,对所有非负整数i:每到第i+0.1秒时可以输入一个文章字符,每到第i+0.9秒时有P的概率崩溃(回到开头或者上一个存盘点) 每到第i秒有一次机会可以选择按下X个键存盘 ...

  5. HDU 5984 数学期望

    对长为L的棒子随机取一点分割两部分,抛弃左边一部分,重复过程,直到长度小于d,问操作次数的期望. 区域赛的题,比较基础的概率论,我记得教材上有道很像的题,对1/len积分,$ln(L)-ln(d)+1 ...

  6. HDU 5570 balls 期望 数学

    balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5570 De ...

  7. poj 2096 Collecting Bugs && ZOJ 3329 One Person Game && hdu 4035 Maze——期望DP

    poj 2096 题目:http://poj.org/problem?id=2096 f[ i ][ j ] 表示收集了 i 个 n 的那个. j 个 s 的那个的期望步数. #include< ...

  8. hdu 5159 Card (期望)

    Problem Description There are x cards on the desk, they are numbered from 1 to x. The score of the c ...

  9. hdu 5245 Joyful(期望的计算,好题)

    Problem Description Sakura has a very magical tool to paint walls. One day, kAc asked Sakura to pain ...

随机推荐

  1. Jquery each跳出循环

    Jquery each跳出循环break--return false--跳出所有循环continue--return true--跳出当前循环

  2. 常用的 HTML 头部标签

    曾几何时,我们已经不再手写 HTML 标签.Emmet.Markdown 等工具让我们「健步如飞」,但是我们真的了解这些标签了吗? 基本标签 使用 HTML5 doctype,不区分大小写. < ...

  3. 关于rabbitmq的消息路由的同步问题

    http://www.cnblogs.com/me-sa/archive/2012/11/12/rabbitmq_ram_or_disk_node.html我是看了上面的博客明白了一些原理的,我之前一 ...

  4. 洛谷P2062 分队问题(dp)

    题意 题目链接 给定n个选手,将他们分成若干只队伍.其中第i个选手要求自己所属的队伍的人数大等于a[i]人. 在满足所有选手的要求的前提下,最大化队伍的总数. 注:每个选手属于且仅属于一支队伍. So ...

  5. VueJs $watch()方法总结!!

    最近公司用vue框架写交互,之前没怎么写过,但是很多数据双向绑定的东东跟angular很像!所以上手很快!哈哈 今天就碰到一个vue的问题啊!!产品需求是,datetimepick时间选择器一更改时间 ...

  6. Kendo MVVM 数据绑定(五) Events

    Kendo MVVM 数据绑定(五) Events 本篇和 Kendo MVVM 数据绑定(三) Click 类似,为事件绑定的一般形式.Events 绑定支持将 ViewModel 的方法绑定到 D ...

  7. 枚举转List

    将枚举值转为list (name,value) 的形式 /// <summary> /// 获取口味 /// </summary> /// <returns>< ...

  8. SQL Server 2012安装配置(Part1 )

    1 安装前准备 安装 SQL Server 2012 服务器及客户端前,需要提前做以下两项准备: SQL Server2012 依赖于.Net Framework 3.5.1 组件.Windows S ...

  9. [SecureCRT]通过SFTP方式上传本地文件到服务器

    1.在本地建一个文件夹,如:d:\My Documents,在此目录下,放入我们需要上传的文件,如:nmon_linux_x86_64 2.然后打开我们的SecureCRT工具,一次选择Options ...

  10. userBean的删除

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...