题目描述: 一个n面的骰子,求期望掷几次能使得每一面都被掷到. 题解:先谈一下期望DP. 一般地,如果终止状态固定,我们都会选择逆序计算. 很多题目如果顺序计算会出现有分母为 0 的情况,而逆序计算中则不会出现. 比如,对于本题,我们设状态 $F_{i}$ 表示当前已翻过 $i$ 种不同的面,为了翻完每个面还需要额外翻的期望次数. 终止状态: $F_{n}=0$  考虑枚举到 $F_{i}$ ,那么当前翻到的面有两种可能. $1.$ 先前被翻过,那么该概率是 $P_{1}=\frac{i}{n}…
[HDU4652]Dice(数学期望,动态规划) 题面 Vjudge 有一个\(m\)面骰子 询问,连续出现\(n\)个相同的时候停止的期望 连续出现\(n\)个不同的时候停止的期望 题解 考虑两种分开询问来算. 第一种: 设\(f[i]\)表示已经有连续的\(i\)个相同时,到达目标状态的期望. \[f[i]=\frac{1}{m}f[i+1]+\frac{m-1}{m}f[1]+1\] 相邻两项作差,得到 \[m(f[i+1]-f[i])=f[i+2]-f[i+1]\] 按照顺序列出来 \(…
[BZOJ2134]单位错选(数学期望,动态规划) 题面 BZOJ 题解 单独考虑相邻的两道题目的概率就好了 没了呀.. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<set> #include<map> #include&l…
[BZOJ1415][NOI2005]聪聪和可可(动态规划,数学期望) 题面 BZOJ 题解 先预处理出当可可在某个点,聪聪在某个点时 聪聪会往哪里走 然后记忆化搜索一下就好了 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<set> #i…
[Luogu1291]百事世界杯之旅(动态规划,数学期望) 题面 洛谷 题解 设\(f[i]\)表示已经集齐了\(i\)个名字的期望 现在有两种方法: 先说我自己的: \[f[i]=f[i-1]+1+(1-p)(1*p^1+2*p^2+....)\] 其中\(p=\frac{i-1}{n}\) 为什么,很简单 首先要多收集一个,期望\(+1\)是显然的 但是还可能一直买到了已经有的名字中的一个 有\(p\)的概率多买一个 \(p^2\)的概率多买两个 这样无穷的算下去 然后对于后面那个式子 做两…
[BZOJ4872]分手是祝愿(动态规划,数学期望) 题面 BZOJ 题解 对于一个状态,如何求解当前的最短步数? 从大到小枚举,每次把最大的没有关掉的灯关掉 暴力枚举因数关就好 假设我们知道了当前至少要关\(tot\)次 如果一个灯被动两次以上是没有任何意义的 所以,相当于,要动的灯只有\(tot\)个 其他的是没有任何意义的 所以,题面可以变为: 现在有\(tot\)个\(1\),\(n-tot\)个\(0\) 每次随机选择一个数将其异或\(1\) 求最终变为\(0\)的期望 我们现在考虑一…
[BZOJ1076]奖励关(动态规划,数学期望) 题面 懒,粘地址 题解 我也是看了题解才会做 看着数据范围,很容易想到状压 然后,设\(f[i][j]\)表示当前第\(i\)轮,状态为\(j\)的期望 枚举当前掉出来哪一个物品 然后....怎么转移??? 当前物品如果原来出现过,,我也不知道出现了几次呀... 根本找不到上一次的状态 然后\(hzwer\)告诉我们,倒着来 设这样的话,状态倒过来推,我们就只需要往上加东西的状态即可 #include<iostream> #include<…
Play the Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 3648    Accepted Submission(s): 1181Special Judge Problem Description There is a dice with n sides, which are numbered from 1,2,...,…
[HDU4336]Card Collector (动态规划,数学期望) 题面 Vjudge 题解 设\(f[i]\)表示状态\(i\)到达目标状态的期望 \(f[i]=(\sum f[j]*p[j]+1)/(\sum p[j])\) 直接枚举一下即可 #include<cstdio> int n; float f[1<<20],p[20]; int main() { while(scanf("%d",&n)!=EOF) { for(int i=0;i&l…
起因:在一场训练赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6829 题目大意:有三个人,他们分别有\(X,Y,Z\)块钱(\(1<=X,Y,Z<=1e6\)),钱数最多的(如果不止一个那么随机等概率的选一个)随机等可能的选另一个人送他一块钱.直到三个人钱数相同为止.输出送钱轮数的期望,如果根本停不下来,输出-1. 根据题目的意思,其实就是每次向包里随机加入一枚钱币,直到包里某种钱币数量达到 100.本题的核心是如何…