http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3329

题意:
现在有三个骰子,分别有k1,k2和k3面,面上的点就是1~ki。每次扔骰子,如果这三个骰子的值分别对应为a,b,c,那么将值初始化为0,否则就将三个骰子的点值和相加。求大于等于n的扔骰子次数期望。

思路:

这道题目主要在于推公式,看着别人的题解想了好久。

先设$E(i)$为此时和为i时还需要的期望,易得(1):$E(i)=\sum (E(i+k)P(k))+E(0)P(0)+1$(这里$P(k)$为点值和为k的概率,$P(0)$就是对应a,b,c的概率)。

现在我们要求解的是$E(0)$,而且发现每个式子中都会包含$E(0)$。

当遇到这样的情况时我们可以先假设一下,假设(2):$E(i)=A(i)E(0)+B(i)$,那么(3):$E(i+k)=A(i+k)E(0)+B(i+k)$。

将(3)式带入(1)式,得(4):$E(i)=(\sum (A(i+k)P(k))+P(0))*E(0)+\sum (B(i+k)P(k))+1$。

将(2)式和(4)式作比较,可得:

(5):$A(i)=\sum (A(i+k)P(k))+P(0)$

(6):$B(i)=\sum (B(i+k)P(k))+1$

而由(2)式我们又可以推出$E(0)=\frac{B(0)}{1-A(0)}$。

所以现在要的就是A(0)和B(0)的值,这个很简单,由(5)、(6)递推得到即可。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn=+; int n,k1,k2,k3,a,b,c;
double p0;
double A[maxn],B[maxn],p[maxn]; int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
cin>>n>>k1>>k2>>k3>>a>>b>>c;
memset(p,,sizeof(p));
p0=1.0/k1/k2/k3;
for(int i=;i<=k1;i++)
for(int j=;j<=k2;j++)
for(int t=;t<=k3;t++)
{
if(i==a && j==b && t==c) continue;
p[i+j+t]+=p0;
}
for(int i=n;i>=;i--)
{
A[i]=p0,B[i]=;
for(int t=;t<=k1+k2+k3;t++)
{
if(i+t>n) continue;
A[i]+=A[i+t]*p[t];
B[i]+=B[i+t]*p[t];
}
}
printf("%.16f\n",B[]/(-A[]));
}
return ;
}

ZOJ 3329 One Person Game (经典概率dp+有环方程求解)的更多相关文章

  1. ZOJ 3329 One Person Game 【概率DP,求期望】

    题意:有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和. 当分数大于n时结束.求游戏的期望步数.初始分数为0 设dp[i]表示达到 ...

  2. ZOJ 3329 One Person Game(概率DP,求期望)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754 题目大意: 有三个骰子,分别有K1,K2,K3个面,一次投掷可以得到三个 ...

  3. ZOJ3329之经典概率DP

    One Person Game Time Limit: 1 Second      Memory Limit: 32768 KB      Special Judge There is a very ...

  4. ZOJ 3329 One Person Game:期望dp【关于一个点成环——分离系数】

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3329 题意: 给你面数分别为k1,k2,k3的三个骰子. 给定a ...

  5. zoj 3380 Patchouli's Spell Cards 概率DP

    题意:1-n个位置中,每个位置填一个数,问至少有l个数是相同的概率. 可以转化求最多有l-1个数是相同的. dp[i][j]表示前i个位置填充j个位置的方案数,并且要满足上面的条件. 则: dp[i] ...

  6. HDU4089 Activation(概率DP+处理环迭代式子)

    题意:有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有一下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后(概 ...

  7. [转]概率DP总结 by kuangbin

    概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...

  8. 概率dp呜呜

    概率dp有环怎么办? 答案可劲迭代 ,然后可劲消元 , 怎么消? 我就不知道了. 呵呵

  9. 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< ...

随机推荐

  1. POJ:2049Finding Nemo(bfs+优先队列)

    http://poj.org/problem?id=2049 Description Nemo is a naughty boy. One day he went into the deep sea ...

  2. Selenium+Java元素定位之三

    首先自己先准备一个表格代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  3. test examples/test scripts

    //https://www.getpostman.com/docs/v6/postman/scripts/test_examples //Setting an environment variable ...

  4. 课堂练习Complex类

    Complex类 #include<iostream> #include<cmath> using namespace std; class Complex { public: ...

  5. 集成学习ensemble

    集成学习里面在不知道g的情况下边学习边融合有两大派:Bagging和Boosting,每一派都有其代表性算法,这里给出一个大纲. 先来说下Bagging和Boosting之间的相同点:都是不知道g,和 ...

  6. mysql的转储SQL文件

    1.转储数据库的SQL文件,有两个选择,一是转储结构:另一种是转储数据与结构: 2.以上两种转储都不会将事件(定时器)转储,所以特别注意这个,否则以为将数据库备份完了,其实漏掉了所有的事件代码,所以需 ...

  7. JSTL—标签

    什么是JSTL标签? Jsp标准标签库(JSP Standerd Tag Library) JSTL的优点是什么? 1) 提供一组标准的标签 2)可用于编写动态功能 使用JSTL的步骤? 1)引入ja ...

  8. VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)

    上一节中鸡啄米讲了为Ribbon Bar添加控件的方法.本节教程鸡啄米将继续完善前面的实例,讲解一些稍复杂的控件的添加方法,及如何为它们添加消息处理函数. 一.为Ribbon Bar添加更多Ribbo ...

  9. cf 459E

    cf459E 这题说的是 给定一个n点m条边的带边权的有向图,从中找出一条路径(可以带环),该路径包含的边数最多,并且要求路径中的权值必须严格递增,然后对边进行排序完个后采用dp去解特殊判断一下边权值 ...

  10. python 换行符的识别问题,Unix 和Windows 中是不一样的

    关于换行符的识别问题,在Unix 和Windows 中是不一样的(分别是n 和rn).默认情况下,Python 会以统一模式处理换行符.这种模式下,在读取文本的时候,Python 可以识别所有的普通换 ...