嘟嘟嘟

题目大意就是对于一个m面的骰子,回答这么两个问题:

1.求连续扔n次都是同一数字的期望次数。

2.求连续扔n次每一次数字都不相同的期望次数。

对于期望dp特别菜的我来说,这道题已经算是很难了。反正是抠了一天……

我们先看第一问。

令fi表示连续 i 次数字都相同的期望,那么要考虑他能转化到什么状态,而不是由什么状态转化过来。

转化到什么状态要考虑到所有情况:包括扔的数字相同的和不同两种情况,于是转移方程就写出来了:

  fi = 1 / m * fi+1 + (m - 1) / m * f1.

因为如果扔到的数字不同,就退回到了f1.

然而这个方程是有后效性的,所以变一个形:

  fi+1 = m * fi - (m - 1) * f1

还可以再变,相邻两项作差得:

  fi+1 - fi = m * (fi - fi-1)

当i = 1时,a1 = f1 = 1

当i >= 2时,令ai = fi - fi-1

于是ai就是一个公比为m的等比数列。

然后很显然

  fn = Sn = a1 * (1 - qn) / (1 - q) = (1 - mn) / (1 - m).

用快速幂求解即可。

然后是第二问:

令f[i]表示抛出 i 次不一样的数字的期望,则

  fi = (m - i) / m * fi+1 + 1/ m * fi + 1 / m * fi-1 + 1/ m * fi-2 +……+ 1 / m * f1.

因为有1 / m的概率和第fj次是相同的。

然后每一次将fi累加到fn就行了。

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-;
const int maxn = 1e6 + ; int T, d, m, n;
db dp[maxn]; int quickpow(int a, int b)
{
int ret = ;
while(b)
{
if(b & ) ret *= a;
a *= a; b >>= ;
}
return ret;
} int main()
{
while(scanf("%d", &T) != EOF)
{
while(T--)
{
scanf("%d%d%d", &d, &m, &n);
if(!d) printf("%.9lf\n", (db)(quickpow(m, n) - ) / (db)(m - ));
else
{
dp[] = 1.00; dp[n] = dp[];
for(rg int i = ; i < n; ++i)
{
dp[i] = (db)m / (db)(m - i) * dp[i - ];
dp[n] += dp[i];
}
printf("%.9lf\n", dp[n]);
}
}
}
return ;
}

HDU 4652 Dice的更多相关文章

  1. HDU 4652 Dice(期望)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意:一个m个面的筛子.两种询问:(1)平均抛多少次后使得最后n次的面完全一样:(2)平均抛多少 ...

  2. HDU 4652 Dice:期望dp(成环)【错位相减】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意: 给你一个有m个面的骰子. 两种询问: (1)"0 m n": “最后 ...

  3. HDU 4652 Dice (概率DP)

    版权声明:欢迎关注我的博客,本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/36685493 D ...

  4. hdu 4652 Dice 概率DP

    思路: dp[i]表示当前在已经投掷出i个不相同/相同这个状态时期望还需要投掷多少次 对于第一种情况有: dp[0] = 1+dp[1] dp[1] = 1+((m-1)*dp[1]+dp[2])/m ...

  5. Dice (HDU 4652)

    题面: m 面骰子,求1. 出现n个连续相同的停止 ;2. 出现n个连续不同的停止的期望次数.(n, m ≤ 10^6 ) 解析: 当然要先列式子啦. 用f[i](g[i])表示出现i个连续相同(不相 ...

  6. HDOJ 4652 Dice

      期望DP +数学推导 Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  7. 【HDOJ】4652 Dice

    1. 题目描述对于m面的骰子.有两种查询,查询0表示求最后n次摇骰子点数相同的期望:查询1表示最后n次摇骰子点数均不相同的期望. 2. 基本思路由期望DP推导,求得最终表达式.(1) 查询0    不 ...

  8. hdu 5012 Dice

    Problem Description There are 2 special dices on the table. On each face of the dice, a distinct num ...

  9. HDU 5012 Dice (BFS)

    事实上是非常水的一道bfs,用字符串表示每一个状态,map判重就ok了. 题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5012 #include&l ...

随机推荐

  1. 二、socket编写简单BIO的HTTP服务器

    一.目标 诸如tomcat等web服务器中间件简化了我们web的开发成本,但有时候我们或许并不需要这么一个完备的服务器,只是希望做一个简单地处理或者做特殊用途的服务器. 本文将提供一个HTTP的服务器 ...

  2. redux实现原理

    redux基本概念 基本概念 1.store 用来保存数据的地方,使用createStore来生成数据 store = createStore(fn) 2.state,通过拷贝store中的数据得到 ...

  3. html和css入门 (一)

    HTML简介 什么是HTML HTML 的全称为 超文本标记语言(Hyper Text Markup Language),这种语言给我们提供一种建立结构性文档的方法.通过表示结构性的标签语法,我们可以 ...

  4. 洛谷 P3391 文艺平衡树

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 --b ...

  5. CSS实现太极图(1个div实现)

    使用一个div实现太极图的步骤如下: HTML部分: <body> <div class="box-taiji"> </div> </bo ...

  6. NGINX本地服务器解析域名

    1.找到hosts文件 ,添加需要解析的域名 2.在cmd命令窗口中检测解析是否生效 3 找到本地服务器的域名配置文件:添加绑定的域名,更改访问的目录 4.添加pathinfo.隐藏index.php ...

  7. Apose.Cell导出的Excel数字格式正确显示

    使用Apose.Cell导出Excel时假如导出的如上图:边框左上角有绿色三角形区域,选中某个区域会出现感叹号询问是否要将文本转换为数字 那么在代码中使用PutValue方法时,后面的bool参数设为 ...

  8. HTML中的Head标签学习

    在页面加载完成的时候,标签head里的内容,是不会在页面中显示出来的.它包含了像页面的<title>(标题) ,CSS(如果你想用CSS来美化页面内容),图标和其他的元数据(比如 作者,关 ...

  9. Java学习笔记(3)----网络套接字服务器多线程版本

    本例给出一个客户端程序和一个服务器程序.客户端向服务器发送数据.服务器接收数据,并用它来生成一个结果,然后将这个结果返回给客户端.客户端在控制台上显示结果.在本例中,客户端发送的数据是圆的半径,服务器 ...

  10. RequestMapping 支持的方法

    基于版本:Spring Framework 4.3.5.RELEASE 1.支持指定多个方法 @RequestMapping(value = "/index", method = ...