zoj3329 One Person Game】的更多相关文章

在推导期望方程时我们常常会遇到dp[i]和其他项有关联,那么这时候我们就难以按某个顺序进行递推 即难以通过已经确定的项来求出新的项 即未知数的相互关系是循环的 但是我们又可以确定和dp[i]相关联的项是有规律的,即存在一个可以递推dp[i]的通项公式,那么不妨设置未知数,通过原方程的迭代来打破这种循环 为了完成递推,我们需要通过递推和dp[i]有关的参数来间接求出dp[i] 比如递推方程dp[i]总是和dp[1]有关,那么我们可以肯定dp[i]=ai*dp[1]+b[i] 那么用这个方程进行迭代…
One Person Game Time Limit: 1 Second Memory Limit: 32768 KB Special Judge There is a very simple and interesting one-person game. You have 3 dice, namely Die1, Die2 and Die3. Die1 has K1 faces. Die2 has K2 faces. Die3 has K3 faces. All the dice are f…
One Person Game Time Limit: 1 Second      Memory Limit: 32768 KB      Special Judge There is a very simple and interesting one-person game. You have 3 dice, namely Die1, Die2 and Die3. Die1 has K1 faces. Die2 has K2 faces. Die3 has K3 faces. All the…
题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754 题意:有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和. 当分数大于n时结束.求游戏结束时的期望步数. 分析:这题状态转移方程挺容易想,但递推化简时又是困难重重,还是得多练习. 设dp[i]表示在i分时到达目标状态的期望,pk为投掷k分的概率,p0为回到0的概率 则dp[i]=∑(pk*dp…
题目大意:有3个骰子,各有k1,k2,k3个面,面值为1~ki.还有一个计数器,初始值为0,统计所有的面值和.每次同时置这三个骰子,如果第一个骰子的朝上的值为a.第二个值为b.第三个值为c,那么将计数器置为零.直到计数器的值大于n时结束,求次数的期望值. 题目分析:这道题的状态转移方程不难写.定义状态dp(i)表示计数器值为 i 时还可以置几次,另外定义pk表示一次置出的3个骰子之和为k的概率,p0表示置出a.b.c的概率.则状态转移方程为:dp(i)= ∑pk*dp(i+k)+p0*dp(0)…
题意 你有三枚色子,第i个色子有ki面,你有一个计数器. 1.开始的时候将计数器调至0 2.扔三个色子,如果色子1是a,色子2是b,色子3是c,则将计数器归零.否则计数器加上三个色子的和. 3.如果计数器的数字大于等于n游戏结束,否则重复步骤 计算扔色子次数的期望 分析 通过带入系数解决概率DP问题. f[i]为当前计数器的数字是i,到游戏结束的期望次数是多少. f[i]=sum(f[i+k]*p)+1+f[0]*p. 因为f[0]就是我们所求的东西,所以我们令f[i]=A[i]*f[0]+B[…
One Person Game Time Limit: 1 Second      Memory Limit: 32768 KB      Special Judge There is a very simple and interesting one-person game. You have 3 dice, namely Die1, Die2 and Die3. Die1 has K1 faces. Die2 has K2 faces. Die3 has K3 faces. All the…
要点: 1.期望的套路,要求n以上的期望,则设dp[i]为i分距离终点的期望步数,则终点dp值为0,答案是dp[0]. 2.此题主要在于数学推导,一方面是要写出dp[i] = 什么,虽然一大串但是思维上并不难:然后就是一种解方程的方法,因为都跟dp[0]有关,且dp[0]是个确定的常数,所以设dp[i] = A[i] * dp[0] + B[i],带入上面那一串解出A[i].B[i],发现是个递推式,于是递推求出A[i]B[i]即可得到dp[0] = B[0] / (1 - A[0]).推荐邝斌…
首先要推出dp[i]的期望方程,会发现每一项都和dp[0]相关, 那我们将dp[i]设为和dp[0]有关的式子dp[i]=a[i]*dp[0]+b[i],然后再回代到原来的期望方程里 然后进行整理,可以发现两个系数a[i],b[i]是可以逆推的,并且通过求出a[0],b[0]可以求出dp[0] #include<bits/stdc++.h> using namespace std; #define maxn 1050 double A[maxn],B[maxn],p[maxn]; int ma…
题描: 有三个均匀的骰子,分别有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]是未知的,那我们就把这玩意儿…