ZOJ 3329 期望DP
题目大意:
给定3个已经规定好k1,k2,k3面的3个色子,如果扔到a,b,c则重新开始从1 计数,否则不断叠加所有面的数字之和,直到超过n,输出丢的次数的数学期望
我们在此令dp[]数组记录从当前数值到结束的数学期望
假如有3个面数都为2的色子
那么dp[i] = 1.0 / 2/2/2 * dp[0] + 1.0/8*dp[i+3] +3.0/8*dp[i+4]+3.0/8*dp[i+5]+1.0/8*dp[i+6] + 1
当然那些下标大于i的dp值均为0
可是我们这样从后往前推会导致无法计算dp[0]的数值,没法推
从新寻找规律,可以看做
dp[i] = a[i] * dp[0] + b[i]; 1式
dp[i] = p0 * dp[0] + ∑(dp[i+k]*p[k]) + 1; 2式
1式代人2式
dp[i] = p0*dp[0] + ∑((a[i+k]*dp[0]+b[i+k]))*p[k])+1
dp[i] =( p0+∑(a[i+k]*p[k])) dp[0] + ∑(b[i+k]*p[k]) +1
所以a[i] =p0+∑(a[i+k]*p[k]) b[i] = ∑(b[i+k]*p[k]) +1
这样我们由后往前推不断得到所有的a[i]和b[i]值
dp[0] = a[0]*dp[0]+b[0]
这样我们得到a[0],b[0]就很容易得到dp[0]的值了
这是这段叠加处求a,b数组的代码
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=n;i>=0;i--){
for(int j=3;j<=maxn;j++)
{
a[i]+=a[i+j] * pro[j];
b[i]+=b[i+j] * pro[j];
}
a[i]+=1.0/k1/k2/k3;
b[i]+=1;
}
#include <cstdio>
#include <cstring> using namespace std;
double pro[],a[],b[]; int main()
{
int n,k1,k2,k3,d,e,f,T;
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d%d%d%d",&n,&k1,&k2,&k3,&d,&e,&f); int maxn = k1+k2+k3;
memset(pro,,sizeof(pro));
for(int i=;i<=k1;i++){
for(int j=;j<=k2;j++){
for(int k=;k<=k3;k++)
if(i!=d||j!=e||k!=f)
pro[i+j+k]++;
}
} for(int i=;i<=maxn;i++)
pro[i] = pro[i]*1.0/k1/k2/k3; memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(int i=n;i>=;i--){
for(int j=;j<=maxn;j++)
{
a[i]+=a[i+j] * pro[j];
b[i]+=b[i+j] * pro[j];
}
a[i]+=1.0/k1/k2/k3;
b[i]+=;
} double ans = b[] / (-a[]);
printf("%.10f\n",ans);
}
}
ZOJ 3329 期望DP的更多相关文章
- zoj 3329 概率dp
题意:有三个骰子,分别有k1,k2,k3个面.每个面值为1--kn每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和.当分数大于n时结束.求游戏的期望步数.初始分数为0 链接 ...
- poj 2096 Collecting Bugs && ZOJ 3329 One Person Game && hdu 4035 Maze——期望DP
poj 2096 题目:http://poj.org/problem?id=2096 f[ i ][ j ] 表示收集了 i 个 n 的那个. j 个 s 的那个的期望步数. #include< ...
- poj 2096 , zoj 3329 , hdu 4035 —— 期望DP
题目:http://poj.org/problem?id=2096 题目好长...意思就是每次出现 x 和 y,问期望几次 x 集齐 n 种,y 集齐 s 种: 所以设 f[i][j] 表示已经有几种 ...
- ZOJ 3822 Domination 期望dp
Domination Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
- [NOIP2016]换教室 D1 T3 Floyed+期望DP
[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...
- HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)
题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...
- 【BZOJ-4008】亚瑟王 概率与期望 + DP
4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 832 Solved: 5 ...
- 期望dp BZOJ3450+BZOJ4318
BZOJ3450 概率期望DP f[i]表示到i的期望得分,g[i]表示到i的期望长度. 分三种情况转移: ① s[i]=‘x’:f[i]=f[i-1],g[i]=0 ② s[i]=‘o’:f[i]= ...
随机推荐
- git介绍及安装
git介绍 git是一个开源的分布式版本控制系统,用于敏捷高效的处理任何或大或小的项目.git是linus Torvalds为了帮助管理Linux内核开发的一个开放源码的版本控制软件. Git 与常用 ...
- 转 Docker和hadoop
2017-06-21 朱洁 Docker很热,怎么形容?感觉开源除了spark技术,就是docker了,甚至把Go语言也带火了,把Go在TIOBE的排名从百名外带入主流语言的行列. Docker快成救 ...
- Git ---创建和切换分支
······································································"天下武功,唯快不破" git分支: g ...
- 掌握Spark机器学习库-07-随机梯度下降
1)何为随机梯度下降 优化方法 迭代更新,来寻找函数全局最优解的方法 与最小二乘法相比:适用于变量众多,模型更复杂 2)梯度 变化最快,“陡峭” 通过函数表达式来衡量梯度 3)随机梯度下降原理推导过程 ...
- Objective - c Chapter 1 -2 Hello world
Objective - c Chapter 1 Hello world 1.1 1.2.On the Welcome screen, click "Create a new Xcode ...
- elasticsearch.yml 配置说明
cluster.name: 指定node所属的cluster. node.name: 本机的hostname. node.master: 是否可以被选举为master节点.(true or false ...
- HTML5——loading
https://www.cnblogs.com/wangmeijian/p/4449150.html https://www.cnblogs.com/yunser/p/canvas-baidu-loa ...
- 【译】x86程序员手册37-第10章 初始化
Chapter 10 Initialization 第10章 初始化 After a signal on the RESET pin, certain registers of the 80386 a ...
- 重装macOS环境配置笔记
由于早些年买mac的时候写代码的经验还不够,导致多年使用后mac上装满了乱七八糟的软件,比如python就有系统自带的,xcode里的,pyenv的,以及brew安装的各种版本,nginx,Apach ...
- 软件开发:速度 vs 质量
程序开发项目进行过程中,通常会冒出这样的困惑:应该选择速度,还是选择质量?很多程序猿都会有偷懒的思维,觉得把一些摸不清头绪.不知道怎么写的代码片段去掉,可以节省很多时间,更早完成项目计划. 其实过去几 ...