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]= ...
随机推荐
- this关键字的构造方法的使用
package com.wh.Object3; public class this_Demo { private String name; private double price; private ...
- 453 Minimum Moves to Equal Array Elements 最小移动次数使数组元素相等
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1.示例:输入:[1,2,3]输出:3解释:只需要3次移动(注意每次移动会增加两个元素 ...
- 204 Count Primes 计数质数
计算所有小于非负整数 n 的质数数量. 详见:https://leetcode.com/problems/count-primes/description/ Java实现: 埃拉托斯特尼筛法:从2开始 ...
- 1268 和为K的组合 Meet in mid二分思路
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1268&judgeId=193772 给出n = 20个数,问其是 ...
- 平衡图片负载,提升web站点访问体验
最近给分公司做官方网站,内网测试一切ok,发布至云端后,体验惊人——公司外网网速渣渣(十几k~几十k),更加要命的是,网站的高清图,根本就加载不出来,几秒,十几秒过去了,仍然在转圈圈,如下图... 于 ...
- Android BitmapFactory.decodeFile(filePath, options) 返回 Null 6.0权限
今天在做拍照上传的时候遇到个问题,根据路径获取Bitmap 失败,一直返回空,以为这个路径获取Bitmap代码久经考验,不怀疑它,找参数传入是否正确,初步怀疑是 filePath 没传进去,打印 fi ...
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
高阶函数Higher-orderfunction 变量可以指向函数 >>> abs #abs(-10)是函数调用,而abs是函数本身 <built-in function ab ...
- hibernate 批量插入数据
如题,有两种方法 1)使用FLUSH 2)使用JDBC 分别来解释: 1)hibernate在进行数据库操作的时候,都要有事务支持的.可能你曾遇到过,没有加事务,程序会报错的情况. 而事务每次提交的时 ...
- VC++模拟一次鼠标点击返回原位置
HWND h; RECT r1; POINT p;//x,y void ONCE() { h=::FindWindow(NULL,"biaoti"); ::GetWindowRec ...
- POI原生导入读取EXCEL
好久没用 最近项目有冲突 所以又用到了这个 谁知道以后还会不会用 先记下来吧 直接扔项目里 调方法就OK 了. 记录一下....不想再写类似这样的东西了 import org.apache.poi.h ...