hdu 4625 Dice(概率DP)
Dice
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 180 Accepted Submission(s): 121 Special Judge
题意:
输入 :op,m,n;
op=0:表示最后n次骰子的面都是一样的!!
op=1:表示最后n次骰子的面是互不相同的!!
对于op=0:对于i状态(即最后i次骰子的面都是一样的,比如是xx。。xx),然后接下来我可以有1/m的概率掷到x,即有1/m的概率可以转移到i+1这个状态
同时,若我可以有1-1/m的概率掷到非x,比如序列变为(xx。。xxy),即有1-1/m的概率可以转移到i=1这个状态;
所以状态转移为:dp[i]=1/m*dp[i+1]+(1-1/m)*dp[1]+1; (__dp[n]=0__);
然后就是n-1个方程递推下去求出dp[1]即可;
对于op=1:对于i状态(即最后i次骰子的面都是互不相同的,比如是xy。。ab),然后接下来我可以有1-i/m的概率掷到新的元素,比如序列变为(xy。。abc),
即有1-i/m的概率可以转移到i+1这个状态
同时,我各有可以有1/m的概率分别转移到(i,i-1,i-2,。。,1)这些状态,比如序列变为(xy。。abx,即转为i状态!!!),
所以状态转移为:dp[i]=(1-i/m)*dp[i+1]+1/m*(dp[i]+dp[i-1]+..+dp[1])+1; (__dp[n]=0__);
然后就是n-1个方程递推下求解啦(这别要细心奥!!);
#include<stdio.h> int m,n;
void DP1()
{
int i;
double ans,a,b;
a=1.0*(m-)/m;
b=1.0;
for(i=;i<=n-;i++)
{
a=a*1.0/m+1.0*(m-)/m;
b=b/m+;
}
if(n==)ans=1.0;
else ans=b/(-a)+;//b/(1-a)为dp[1];
printf("%.9f\n",ans);
} void DP2()
{
int i;
double ans=1.0,tmp=1.0;
for(i=;i<=n-;i++)//找到递推关系求解!!
{
tmp=tmp*m/(m-i);
ans+=tmp;
}
printf("%.9f\n",ans);
} int main()
{
int T,i,op; while(~scanf("%d",&T))
{
while(T--)
{
scanf("%d%d%d",&op,&m,&n);
if(op==)
DP1();
else
DP2();
} }
}
hdu 4625 Dice(概率DP)的更多相关文章
- HDU 4599 Dice (概率DP+数学+快速幂)
题意:给定三个表达式,问你求出最小的m1,m2,满足G(m1) >= F(n), G(m2) >= G(n). 析:这个题是一个概率DP,但是并没有那么简单,运算过程很麻烦. 先分析F(n ...
- hdu 4599 Dice 概率DP
思路: 1.求f[n];dp[i]表示i个连续相同时的期望 则 dp[0]=1+dp[1] dp[1]=1+(5dp[1]+dp[2])/6 …… dp[i]=1+(5dp[1 ...
- hdu 4652 Dice 概率DP
思路: dp[i]表示当前在已经投掷出i个不相同/相同这个状态时期望还需要投掷多少次 对于第一种情况有: dp[0] = 1+dp[1] dp[1] = 1+((m-1)*dp[1]+dp[2])/m ...
- HDU 3853LOOPS(简单概率DP)
HDU 3853 LOOPS 题目大意是说人现在在1,1,需要走到N,N,每次有p1的可能在元位置不变,p2的可能走到右边一格,有p3的可能走到下面一格,问从起点走到终点的期望值 这是弱菜做的第 ...
- Throwing Dice(概率dp)
C - Throwing Dice Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Lig ...
- HDU - 1099 - Lottery - 概率dp
http://acm.hdu.edu.cn/showproblem.php?pid=1099 最最简单的概率dp,完全是等概率转移. 设dp[i]为已有i张票,还需要抽几次才能集齐的期望. 那么dp[ ...
- HDU 4405 【概率dp】
题意: 飞行棋,从0出发要求到n或者大于n的步数的期望.每一步可以投一下筛子,前进相应的步数,筛子是常见的6面筛子. 但是有些地方可以从a飞到大于a的b,并且保证每个a只能对应一个b,而且可以连续飞, ...
- HDU 4576 Robot(概率dp)
题目 /*********************复制来的大致题意********************** 有N个数字,M个操作, 区间L, R. 然后问经过M个操作后落在[L, R]的概率. * ...
- [HDU 4089]Activation[概率DP]
题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...
- hdu 3853 LOOPS 概率DP
简单的概率DP入门题 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include ...
随机推荐
- websocket 传输数据帧打包 (client端)
/* Vertion: 0.2.1 date: 2015.8.11 content: gcc 编译通过 */ //websocket 传输数据帧打包 client端 //参数:src 为输入字符串 / ...
- Oracle Like子句
Oracle Like子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,您将学习如何使用Oracle LIKE运算符来测试列中的值是否与指定 ...
- [ethereum源码分析](4) ethereum运行开启console
前言 在上一章我们介绍了 ethereum初始化指令 ,包括了系统是如何调用指令和指令的执行.在本章节我们将会介绍 geth --datadir dev/data/ --networkid cons ...
- Linux命令行下常用svn命令
1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/do ...
- HTML,CSS,JavaScript的思维导图
一个思维导图是把抽象的事物具体化,以一个东西为思想核心内容,映射出一系列的组成及作用 影响的内容. HTML的思维导图 HTML是一种超文本标记语言.我认为要学习一门语言首先要知道其是什么,编辑工具是 ...
- 关闭Linux无用端口
关闭系统不必要的端口,增强系统安全,此处以关闭111端口为例进行说明. 1).查看本机正在监听的端口: [root@b ~]# netstat -tlnup Active Internet conne ...
- Gradle 详解
Gradle简单来说,就是工程的管理,帮我们做了依赖,打包,部署,发布等工作.就像一个管家管理我们的项目,我们只用关心写代码就可以了. 1 gradle-wraaper.properties 主工程的 ...
- IK词库扩展
先写个标题,慢慢更新 默认的词库就算最小细粒度分词,很多名词也不会单字分词 比如:阿迪达斯,在IK是一个词,搜索每个字的单字关键词是无结果的,必须搜索阿迪达斯才有结果 所以我们需要扩展词库 IK官方教 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第3节 Random类_10-练习一_生成1-n之间
生成随即数的时候,总是会短一个,因为它是从0开始的 这是左闭右闭区间. 循环100次输出的结果
- js 创建对象的方法
<script> //1.字面量语法 var rectangle1 = {}; rectangle1.name="mindong"; rectangle1.width ...