【期望DP】[zoj3329]One Person Game
题描:
有三个均匀的骰子,分别有k1,k2,k3个面,初始分数是0,
当掷三个骰子的点数分别为a,b,c的时候,分数清零,否则分数加上三个骰子的点数和,
当分数>n的时候结束。求需要掷骰子的次数的期望。
令f[i]为当前三个骰子点数和为i时掷骰子期望次数
则易有:(逆推)
$$f[i]=\sum({p[k]*f[i+k]})+f[0]*P_0+1$$
然而这是逆推...
咱并不知道$f[0]$的值
凉了
吗?
注意到求$f[i]$时跟它有关的所有f[k]中只有f[0]是未知的,那我们就把这玩意儿当做未知数
列方程:
令$f[i]=A_i*f[0]+B_i$(①),则有:
$$f[i+k]=A_{i+k}*f[0]+B_{i+k}$$
代入①式有:
$$f[i]=\sum[p[k]*(A_{i+k}*f[0]+B_{i+k})]+f[0]*P_0+1$$
(②)
(p[k]表示三个骰子掷出和为k时的概率)
变形得:
$$f[i]=[\sum(p[k]*A_{i+k})+P_0]*f[0]+\sum(p[k]*B_{i+k})+1$$
(③)
这样就能发现③式与①式的形式已经大致相同了.
综上:
$$A_i= \sum(p[k]*A_{i+k})+P_0$$
$$B_i=\sum(p[k]*B_{i+k})+1$$
令:$i=0$
有:
$$f[0]=A_0*f[0]+B_0$$
综上:$$f[0]=\frac{B_0}{1-A_0}$$
而f[0]就是我们最后要求的答案
所以我们只需要求a[]和b[]就可以啦
#include<bits/stdc++.h>
#define writeln(x) write(x),puts("")
#define writep(x) write(x),putchar(' ')
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}const int M = ;
int k[M],q[M],n;
double P,p[M],a[M],b[M];
inline void Clear_All(){memset(a,,sizeof(a)),memset(b,,sizeof(b)),memset(p,,sizeof(p));}
int main(){
int T=read();
while(Clear_All(),T--){
n=read();
for(int i=;i<=;i++) k[i]=read();
for(int i=;i<=;i++) q[i]=read();
P=1.0/(k[]*k[]*k[]);
for(int i=;i<=k[];i++)
for(int j=;j<=k[];j++)
for(int w=;w<=k[];w++)
if(i!=q[]||j!=q[]||w!=q[])
p[i+j+w]+=P;
for(int i=n;i>=;i--){
a[i]=P,b[i]=;
for(int j=;j<=k[]+k[]+k[];j++)
a[i]+=a[i+j]*p[j],b[i]+=p[j]*b[i+j];
}printf("%.15lf\n",b[]/(-a[]));
}return ;
}
【期望DP】[zoj3329]One Person Game的更多相关文章
- 【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]= ...
- HDU 4405 期望DP
期望DP算是第一题吧...虽然巨水但把思路理理清楚总是好的.. 题意:在一个1×n的格子上掷色子,从0点出发,掷了多少前进几步,同时有些格点直接相连,即若a,b相连,当落到a点时直接飞向b点.求走到n ...
- POJ 2096 【期望DP】
题意: 有n种选择,每种选择对应m种状态.每种选择发生的概率相等,每种选择中对应的每种状态发生的概率相等. 求n种选择和m种状态中每种至少发生一次的期望. 期望DP好别扭啊.要用倒推的方法. dp[i ...
- ZOJ 3822 Domination 期望dp
Domination Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...
- poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)
Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...
- uva11600 状压期望dp
一般的期望dp是, dp[i] = dp[j] * p[j] + 1; 即走到下一步需要1的时间,然后加上 下一步走到目标的期望*这一步走到下一步的概率 这一题,我们将联通分块缩为一个点,因为联通块都 ...
随机推荐
- Java-Class-C:org.springframework.http.ResponseEntity
ylbtech-Java-Class-C:org.springframework.http.ResponseEntity 1.返回顶部 1. org.springframework.http Clas ...
- 引入CSS的方法
##1 关于引入css样式的方法: 1 外部引入: <link rel="stylesheet" type="text/css" href="& ...
- Spring随笔-bean装配
Spring提供了三种装配方式 1.XML文件进行显式装配 2.java中进行显示装配 3.自动化装配 1.自动化装配的两种实现方式 1.组件扫描:Spring会自动发现应用上下文中创建的bean 2 ...
- centos7.2搭建kubernetes1.5.2+dashboard
一. 简介 近来容器对企业来说已经不是什么陌生的概念,Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过 ...
- MongoDB点滴
0 http://blog.csdn.net/mydeman/article/details/6652387 1 MongoDB 内置连接池,不需要使用额外的连接池驱动 Note: The Mongo ...
- 如何把本地文件上传github
1.$ git config --global user.name "xxx" 2.$ git config --global user.email xxx@qq.com 3.进入 ...
- NodeJS学习笔记之Connect中间件模块(二)
一,开篇分析 大家好,今天这篇文章主要是对"Connect"中间件以及相关辅助中间件,做一个源码分析系列,我想上一篇文章大家也看了, 介绍了使用方式及用途,而这篇也是出于本人的兴趣 ...
- LOL遇到登录服务器问题,未能连接到网络原因
通过打开各种浏览器,发现只有IE不能上网,QQ之类的都能上网,不能登入LOL 只有IE是出现:远程计算机或设备将不接受连接 这个问题 解决办法是: 1.win+r --> 输入regedit 打 ...
- Java异常类及处理
异常概述:运行时发生的不正常情况 在java中用类的形式对不正常的情况进行了描述和封装对象. 描述不正常的类,称之为异常类. 异常就是java通过面向对象的思想将问题封装成了对象,用异常类对其进行描述 ...
- json、pickle和base64
json.dumps() 用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数. json.dump() 用于将dict类 ...