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]= ...
随机推荐
- 导出数据库报错 EXP-00002: 写入导出文件时出错 EXP-00000: 导出终止失败
解决方法: 1.检查磁盘所在空间是否够用. 2.磁盘修复下 排除故障考虑的地方要全面啊.
- php 静态绑定
简介 编辑 后期静态绑定 从PHP 5.3.0开始,PHP增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 该功能从语言内部角度考虑被命名为”后期静态绑定“.”后期绑定“的意思是说 ...
- POJ 2002 Squares 数学 + 必须hash
http://poj.org/problem?id=2002 只能说hash比二分快很多.随便一个hash函数都可以完爆二分. 判断是否存在正方形思路如下: 1.枚举任意两个点,作为正方形的一条边,那 ...
- Uncaught TypeError: Cannot set property 'f7View' of undefined 错误原因
// 添加视图var mainView = myApp.addView('.view-main', { // 因为我们要用动态的导航栏,我们需要使它的这一观点: dynamicNavbar: true ...
- Android开发学习—— 消息机制
###主线程不能被阻塞* 在Android中,主线程被阻塞会导致应用不能刷新ui界面,不能响应用户操作,用户体验将非常差* 主线程阻塞时间过长,系统会抛出ANR异常* ANR:Application ...
- Java_JDBC连接数据库
package com.accp.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Pre ...
- hihocoder offer收割编程练习赛12 D 寻找最大值
思路: 可能数据太水了,随便乱搞就过了. 实现: #include <iostream> #include <cstdio> #include <algorithm> ...
- VUE学习,is 特性,转载来源:https://segmentfault.com/q/1010000007205176/
- IPython notebook快捷键(Jupyter notebook)
转自“https://blog.csdn.net/eswai/article/details/53642802” 本文整理了神器IPython Notebook(或Jupyter Notebook)的 ...
- Node.js——url模块
url模块通过api可以将get提交的参数方便的提取出来