转自:https://www.cnblogs.com/kuangbin/archive/2012/10/02/2710606.html

题目大意:

有三个骰子,分别有k1,k2,k3个面。每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和。当分数大于n时结束。求游戏的期望步数。初始分数为0。

基本思路:

设dp[i]表示达到i分时到达目标状态的期望,pk为投掷k分的概率,p0为回到0的概率

则dp[i]=∑(pk*dp[i+k])+dp[0]*p0+1;

都和dp[0]有关系,而且dp[0]就是我们所求,为常数

设dp[i]=A[i]*dp[0]+B[i];

代入上述方程右边得到:

dp[i]=∑(pk*A[i+k]*dp[0]+pk*B[i+k])+dp[0]*p0+1

=(∑(pk*A[i+k])+p0)dp[0]+∑(pk*B[i+k])+1;

明显A[i]=(∑(pk*A[i+k])+p0)

B[i]=∑(pk*B[i+k])+1

先递推求得A[0]和B[0].

那么 dp[0]=B[0]/(1-A[0]);

代码如下:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;double A[600],B[600];
double p[100];
int main()
{int T;int k1,k2,k3,a,b,c;int n;scanf("%d",&T);while(T--){scanf("%d%d%d%d%d%d%d",&n,&k1,&k2,&k3,&a,&b,&c);double p0=1.0/k1/k2/k3;memset(p,0,sizeof(p));for(int i=1;i<=k1;i++)for(int j=1;j<=k2;j++)for(int k=1;k<=k3;k++)if(i!=a||j!=b||k!=c)p[i+j+k]+=p0;memset(A,0,sizeof(A));memset(B,0,sizeof(B));for(int i=n;i>=0;i--){A[i]=p0;B[i]=1;for(int j=1;j<=k1+k2+k3;j++){A[i]+=A[i+j]*p[j];B[i]+=B[i+j]*p[j];}}printf("%.16lf\n",B[0]/(1-A[0]));}return 0;
}

转载于:https://www.cnblogs.com/imzscilovecode/p/7967124.html

zoj 3329 概率dp相关推荐

  1. zoj 3640 概率dp

    题意: 一只吸血鬼,有n条路给他走,每次他随机走一条路, 每条路有个限制,如果当时这个吸血鬼的攻击力大于 等于某个值,那么就会花费t天逃出去,否则,花费1天 的时间,并且攻击力增加,问他逃出去的期望 ...

  2. 【原创】概率DP总结 by kuangbin

    概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...

  3. 关于概率dp的个人理解与总结

    原文来自:http://blog.csdn.net/wdcjdtc/article/details/38424029 首先,概率dp主要解决的是关于概率问题和期望问题的求解. 难点和普通dp一样在于d ...

  4. 2018.09.01 poj3071Football(概率dp+二进制找规律)

    传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...

  5. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

  6. poj 3071 Football(概率dp)

    http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...

  7. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  8. hdu 3853 LOOPS 概率DP

    简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...

  9. HDU - 4035 Maze(概率dp)

    题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...

最新文章

  1. 作业二:了解流行的软件
  2. db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等...
  3. 如何构建一个分布式爬虫:理论篇
  4. Water-Net:水下图像增强基准数据集(UIEB Dataset)2019年TIP顶刊论文
  5. java 获取服务器网络名_java-siger java使用siger 获取服务器硬件信息(CPU 内存 网络 io等) - 下载 - 搜珍网...
  6. PDF签名系列(1):PDF签名机制的漏洞分析
  7. abap数据类型转换_ABAP 中JSON格式的转换与解析
  8. 自定义View-实现简易车速器(真的够简易)
  9. 活灵活现用 Git --技巧篇
  10. 在linux下安装mplayer和解码器
  11. 选择正确的C/C++ runtime library
  12. 七种常用数据分析方法
  13. 毕业设计3-BME280温湿度大气压传感器调试记录(STM32F103C8T6 + STM32CubeMX + BME280)
  14. NYOJ-366:D的小L
  15. wps转换成word如何实现?不妨试试这两个小技巧
  16. MEM/MBA英语基础(07)复合句-定语从句
  17. 城市信息学其四—城市新陈代谢
  18. STEAM游戏高主频i9-12900k 搭建CS:GO服务器
  19. [LeetCode] Sqrt(int x)解题报告之无限逼近(牛顿法)
  20. win10内存占用率过高怎么办_8GB内存竟不够用了?卸载预装软件帮你腾出更多内存空间!...

热门文章

  1. P2831 愤怒的小鸟
  2. MAC如何查看某个端口的占用情况
  3. BootStrap学习笔记,优缺点总结
  4. myeclipse乱码
  5. insert数据时,获取插入数据的id
  6. 配置apache+php环境详解
  7. linux sort 命令详解
  8. 使用Git生成patch和应用patch
  9. python安装好后打不开_windows的cmd中输入python后打不开python?
  10. mysql注入式攻击_SQL的注入式攻击方式和避免方法