嘟嘟嘟

题目大意就是对于一个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. C#同步、异步编程

    同步编程public partial class Form1 : Form { public Form1() { InitializeComponent(); } //同步执行 private voi ...

  2. Google Voice号码使用说明及用途

    Google Voice号码使用说明及用途 号码 已不能网页注册获取,直接向TB购买,搜Google Voice就行了.很便宜的. 一. Google Voice介绍 Google Voice首先是一 ...

  3. 撩课-Web大前端每天5道面试题-Day2

    1.伪类与伪元素的区别? 1) 定义区别 伪类 伪类用于选择DOM树之外的信息,或是不能用简单选择器进行表示的信息. 前者包含那些匹配指定状态的元素,比如:visited,:active:后者包含那些 ...

  4. [LeetCode]Longest Palindromic Substring题解(动态规划)

    Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You ma ...

  5. 2.springioc实例化bean的三个方法

    1.构造器 也就是在上一篇讲的那个例子,调用默认的无参构造函数 2.静态工厂方法 1)创建需要执行的方法的类 public class HelloWorld { public HelloWorld() ...

  6. parseInt()详解

    主要解释下面的计算方法: parseInt("10"); //返回 10 parseInt("19",10); //返回 19 (10+9) parseInt( ...

  7. Get a “step-by-step” evaluation in Mathematica

    Is it possible in Mathematica to get a step-by-step evaluation of some functions; that's to say, out ...

  8. Redis的基本操作语句

    注:以下出现的key.value都需要具体 1.String类型的数据存储获取 set key value:设置key的值为value,若存在则覆盖,不存在则自动创建decrby get key:获取 ...

  9. mac ASP.NET5

    不写1行代码,在Mac上体验ASP.NET 5的最简单方法   昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天 ...

  10. 在小程序中修改上一个页面里data中的数据调用上一个页面的方法

    //获取已经打开的页面的数组 var pages = getCurrentPages(); //获取上一个页面的所有的方法和data中的数据  var lastpage = pages[pages.l ...