HDU 4652 Dice
题目大意就是对于一个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的更多相关文章
- HDU 4652 Dice(期望)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意:一个m个面的筛子.两种询问:(1)平均抛多少次后使得最后n次的面完全一样:(2)平均抛多少 ...
- HDU 4652 Dice:期望dp(成环)【错位相减】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意: 给你一个有m个面的骰子. 两种询问: (1)"0 m n": “最后 ...
- HDU 4652 Dice (概率DP)
版权声明:欢迎关注我的博客,本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/36685493 D ...
- hdu 4652 Dice 概率DP
思路: dp[i]表示当前在已经投掷出i个不相同/相同这个状态时期望还需要投掷多少次 对于第一种情况有: dp[0] = 1+dp[1] dp[1] = 1+((m-1)*dp[1]+dp[2])/m ...
- Dice (HDU 4652)
题面: m 面骰子,求1. 出现n个连续相同的停止 ;2. 出现n个连续不同的停止的期望次数.(n, m ≤ 10^6 ) 解析: 当然要先列式子啦. 用f[i](g[i])表示出现i个连续相同(不相 ...
- HDOJ 4652 Dice
期望DP +数学推导 Dice Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 【HDOJ】4652 Dice
1. 题目描述对于m面的骰子.有两种查询,查询0表示求最后n次摇骰子点数相同的期望:查询1表示最后n次摇骰子点数均不相同的期望. 2. 基本思路由期望DP推导,求得最终表达式.(1) 查询0 不 ...
- hdu 5012 Dice
Problem Description There are 2 special dices on the table. On each face of the dice, a distinct num ...
- HDU 5012 Dice (BFS)
事实上是非常水的一道bfs,用字符串表示每一个状态,map判重就ok了. 题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5012 #include&l ...
随机推荐
- DES c#加密后java解密
public static String byteArr2HexStr(byte[] bytIn) { StringBuilder builder = new StringBuilder(); for ...
- 十一、spark SQL的scala示例
简介 spark SQL官网:http://spark.apache.org/docs/latest/sql-programming-guide.html sparkSQL是构建在sparkCore之 ...
- VS2012 常用配置
一. 整合svn版本控制 1. 点击此 下载与SVN版本相对应的ankhsvn插件,本人用的是Subversion 1.8 2. 安装ankhsvn插件,打开VS2012,右键任一工程,有显示如下图, ...
- N次剩余和二次剩余
N次剩余 给定 \(N,a,P\),且 \(P\) 最好为质数 可以算出 \(x^N\equiv a(mod~p)\) 的解 首先可以算出 \(P\) 的原根 \(g\) 解方程 \(g^y\equi ...
- SPOJ:NSUBSTR - Substrings
题面 字符串$ S \(最多包含\) 25 \(万个小写拉丁字母.我们将\) F(x) \(定义为长度为\) x \(的某些字符串出现在\) s \(中的最大次数.例如,对于字符串\) "a ...
- 洛谷P4717 【模板】快速沃尔什变换(FWT)
题意 题目链接 Sol 背板子背板子 #include<bits/stdc++.h> using namespace std; const int MAXN = (1 << 1 ...
- CSS使用小技巧
对于元素position 属性中的 relative absolute 页面居中问题 /* relative */div{ position:relative; margin: 0 auto}/* ...
- 获取所有后缀DDE打开命令
概述: 由于需要使用DDE方式打开文件,所以把支持DDE方式打开文件的参数都导出来到文件,方便查找. 并且提供运行DDE命令的工具,可以用于测试DDE功能. 1.运行脚步GetDDE.vbs可以获取系 ...
- 关于eclipse连接外置android模拟器
1.win+R,输入cmd,打开命令提示符 2.cd D:\Java(安卓应用开发)\adt-bundle-windows-64\sdk\platform-toolsadb connect 127.0 ...
- weixin设置菜单
https://jingyan.baidu.com/article/925f8cb8dfcf11c0dce05661.html