【整理】一堆磨人の数学概率期望
2015-03-05 13:55
281 查看
都是水题 = =
↑ 这四个字太能概括一切了
33 + ... + NN
mod 7 的值
打表可以找到循环节
实际上可以用费马小定理证明 sigma(i ^ i % 7) = sigma(i ^ (i % 6) % 7)
ans = (n / 42 % 7 * (s[42] % 7) % 7 + s[n % 42] % 7) % 7
设p为和小于m的概率 则 p = 不合法方案数 / 总方案数
设T为次数期望 则 T = (1 - p) * 1 + p * (1 - p) * 2 + p^2 * (1 - p) * 3 + ... + p^(n-1) * (1 - p) * n ①
① * p 得 p * T = p * (1 - p) * 1 + p^2 * (1 - p) * 2 + ... + p^(n-1) * (1 - p) * (n - 1) + p^n * (1 - p) * n ②
(① - ②) / (1 - p) 得 T = 1 + p + p ^ 2 + p ^ 3 + ... + p ^ (n - 1) + p^n * n
其中n → ∞ 则 T → 1 / (1 - p) 即 T → 1 / 合法方案数
其中合法方案数用状压dp可求出 dp[S][k] 表示二进制集合为S数字和为k的方案数
(1<bi<=1000000, b1*b2*…*bn<=10^25) n(1<=n<=20)
将数列b的每个数质因数分解并把系数相加 于是 a1 * a2 * ... * an = p1 ^ m1 + p2 ^ m2 + ... + pn ^ mn
既是将每个系数分配给a数列的每个数 对于每个pi的分法有 C( mi + n - 2, n - 1 ) 再相乘即可
至于分法的个数计算见很高端的一篇论文 ←
其实就是在n-1个位置放m-1个东西(可重复放置)的方案数
当时看到这道题的时候就觉得眼熟 = =zsl给过的一道题 当时推公式推好久来着orz 其实特别基础的题。。而且这道题和那个在棋盘里放棋子 每行每列都要放一颗的那道题其实是差不多的orz
dp[i][j] 表示已经发现了i种bug属于j个子系统剩余天数的期望 (一定要注意是倒着求)
dp[i][j] = dp[i][j] * (i * j) / (n * s) + dp[i + 1][j] * ((n - i)*j ) / (n * s) + dp[i][j + 1] * (i * (s - j)) / (n * s) + dp[i + 1][j + 1] * (n - i) * (s - j) / (n * s) + 1
移向然后就可以直接记忆化搜索啦
题意:有n个盒子 每个盒子里有一个礼物 然后m个人每人去拿一次 拿完以后盒子还原 求期望拿走的礼物数
这题我开始时写了dp方程的。。后来发现它就是个数学题。。。
其实有个东西叫二项分布你造吧。。。
对于每个盒子:
每一次不被选择的概率为(n - 1) / n
m次都不被选择的概率为 [(n - 1) / n] ^ m
对于n个盒子:
m次不被选择的盒子的期望为 n * [ (n - 1) / n ] ^ m (二项分布)
一个盒子要么被选要么不被选 所以被选的+不被选的期望为n
那么答案就是 n - (n * [ (n - 1) / n ] ^ m) 了
这题是神题c++不可做。。。不知道有没有角虫写了c++高精度过了的。。。
贴个思路:
对于 l >m/2我们可以直接用组合数来求的 ans = n*Σ( C(m,i)*(n-1)^(m-i) )
如果 l <= m/2用DP f[i][j]表示前 i 个数放在 j 个位置并且相同的元素个数小于 l 的数目
f[i][j]=sum{dp[i-1][j-k]*choose[m-(j-k)][k] | k≤j && k<l}
e[i] = e[link[i]] 或 sigma(e[j] / 6) + 1 其中link[i]为飞行通道能抵达i的 j为掷骰子可以到达i的 这个要反向递推 我开始写记忆化搜索爆栈了。。
题解:http://www.cnblogs.com/zhj5chengfeng/archive/2013/03/02/2939601.html
↑ 这四个字太能概括一切了
【1】 ZOJ 3785 What day is that day? (找规律)
题意:求11 + 22 +33 + ... + NN
mod 7 的值
打表可以找到循环节
实际上可以用费马小定理证明 sigma(i ^ i % 7) = sigma(i ^ (i % 6) % 7)
ans = (n / 42 % 7 * (s[42] % 7) % 7 + s[n % 42] % 7) % 7
【2】 ZOJ 3777 Problem Arrangement (状压dp + 数学期望)
题意:给定一个n*n的矩阵 在矩阵中每行选一个数 求第一次选出的数字和>=m的期望设p为和小于m的概率 则 p = 不合法方案数 / 总方案数
设T为次数期望 则 T = (1 - p) * 1 + p * (1 - p) * 2 + p^2 * (1 - p) * 3 + ... + p^(n-1) * (1 - p) * n ①
① * p 得 p * T = p * (1 - p) * 1 + p^2 * (1 - p) * 2 + ... + p^(n-1) * (1 - p) * (n - 1) + p^n * (1 - p) * n ②
(① - ②) / (1 - p) 得 T = 1 + p + p ^ 2 + p ^ 3 + ... + p ^ (n - 1) + p^n * n
其中n → ∞ 则 T → 1 / (1 - p) 即 T → 1 / 合法方案数
其中合法方案数用状压dp可求出 dp[S][k] 表示二进制集合为S数字和为k的方案数
【3】可重复组合
给出n个数字b1,b2,……,bn。求有多少个有序序列a1,a2,……,an,满足b1*b2*……*bn=a1*a2*……*an?(ai>1)(1<bi<=1000000, b1*b2*…*bn<=10^25) n(1<=n<=20)
将数列b的每个数质因数分解并把系数相加 于是 a1 * a2 * ... * an = p1 ^ m1 + p2 ^ m2 + ... + pn ^ mn
既是将每个系数分配给a数列的每个数 对于每个pi的分法有 C( mi + n - 2, n - 1 ) 再相乘即可
至于分法的个数计算见很高端的一篇论文 ←
其实就是在n-1个位置放m-1个东西(可重复放置)的方案数
【4】 poj2096 Collecting Bugs
题意:软件s个子系统会产生n种bug 每种bug被发现几率和存在每个系统的概率相等 如果一天发现一种bug 求每个子系统都发现bug且所有bug都被发现的天数期望当时看到这道题的时候就觉得眼熟 = =zsl给过的一道题 当时推公式推好久来着orz 其实特别基础的题。。而且这道题和那个在棋盘里放棋子 每行每列都要放一颗的那道题其实是差不多的orz
dp[i][j] 表示已经发现了i种bug属于j个子系统剩余天数的期望 (一定要注意是倒着求)
dp[i][j] = dp[i][j] * (i * j) / (n * s) + dp[i + 1][j] * ((n - i)*j ) / (n * s) + dp[i][j + 1] * (i * (s - j)) / (n * s) + dp[i + 1][j + 1] * (n - i) * (s - j) / (n * s) + 1
移向然后就可以直接记忆化搜索啦
【5】zoj3329 One Person Game
题解:http://blog.csdn.net/qq_21841245/article/details/44094977【6】sgu485 Kids and Prizes
这题我开始时写了dp方程的。。后来发现它就是个数学题。。。
其实有个东西叫二项分布你造吧。。。
对于每个盒子:
每一次不被选择的概率为(n - 1) / n
m次都不被选择的概率为 [(n - 1) / n] ^ m
对于n个盒子:
m次不被选择的盒子的期望为 n * [ (n - 1) / n ] ^ m (二项分布)
一个盒子要么被选要么不被选 所以被选的+不被选的期望为n
那么答案就是 n - (n * [ (n - 1) / n ] ^ m) 了
【7】 ZOJ 3380 Patchouli's Spell Cards
题意:m个位置每个位置填入一个数 数的范围是1~n 求至少有L个位置的数一样的概率 输出最简分数的形式这题是神题c++不可做。。。不知道有没有角虫写了c++高精度过了的。。。
贴个思路:
对于 l >m/2我们可以直接用组合数来求的 ans = n*Σ( C(m,i)*(n-1)^(m-i) )
如果 l <= m/2用DP f[i][j]表示前 i 个数放在 j 个位置并且相同的元素个数小于 l 的数目
f[i][j]=sum{dp[i-1][j-k]*choose[m-(j-k)][k] | k≤j && k<l}
【8】HDU 4405 Aeroplane chess
题意:有n个格子 掷骰子往前走 其中有m个飞行通道可以直接从第xi格走到第yi格 求到终点的掷骰子次数期望e[i] = e[link[i]] 或 sigma(e[j] / 6) + 1 其中link[i]为飞行通道能抵达i的 j为掷骰子可以到达i的 这个要反向递推 我开始写记忆化搜索爆栈了。。
#include <cstdio> #include <iostream> #include <cstring> using namespace std; int N, M; int link[100005]; double e[100005]; int main() { while(~scanf("%d%d", &N, &M) && N) { memset(link, 0, sizeof(link)); memset(e, 0, sizeof(e)); while(M--) { int x, y; scanf("%d%d", &x, &y); link[x] = y; } for(int i = N-1; ~i; i--) { if(link[i]) e[i] = e[link[i]]; else { e[i] = 1.; for(int j = 1; j <= 6 && i + j < N; ++j) e[i] += e[i + j] / 6; } } printf("%.4lf\n", e[0]); } return 0; }
【9】HDU4336 Card Collector(状压+数学期望)
题意:有n种卡片 在一包零食里每种卡片有一个出现的概率 求要多少包零食才可以集齐所有卡片(召唤神龙)题解:http://www.cnblogs.com/zhj5chengfeng/archive/2013/03/02/2939601.html
#include <cstdio> #include <iostream> using namespace std; int N; double p[21], f[1<<20]; int main() { while(~scanf("%d", &N)) { for(int i = 1; i <= N; ++i) scanf("%lf", &p[i]); f[(1 << N) - 1] = 0. ; double temp; for(int S = (1 << N) - 2; ~S; S--) { f[S] = 1. , temp = 0. ; for(int i = 1; i <= N; ++i) { if(S & (1 << (i - 1))) continue; temp += p[i]; f[S] += p[i] * f[S | 1 << (i - 1)]; } f[S] /= temp; } printf("%.4f\n", f[0]); } return 0; }
相关文章推荐
- 【整理】简单的数学期望和概率DP
- UVA&&POJ离散概率与数学期望入门练习[4]
- lightoj1104(数学概率与期望)
- [BZOJ4775][点分树][概率与期望][数学][卡精度]网管
- lightoj1274(数学概率与期望)
- 借助树的概率dp(期望)+数学-好题-hdu-4035-Maze
- lightoj1104(数学概率与期望)
- HDU 5245 Joyful (数学概率求期望)
- 概率和数学期望基础题
- POJ3682King Arthur's Birthday Celebration(数学期望||概率DP)
- 概率统计:数学期望、方差、协方差、相关系数、矩
- 面试中的概率题-数学期望(1)
- LightOJ1030(数学概率与期望)
- bzoj1415 [Noi2005]聪聪和可可【概率dp 数学期望】
- 概率统计与机器学习:期望,方差,数学期望,样本均值,样本方差之间的区别
- 面试中的概率问题 - 数学期望(2) - 武器升级需要的宝石数
- POJ2096Collecting Bugs(数学期望,概率DP)
- CF 148D D. Bag of mice (概率DP||数学期望)
- HDU 4438 概率 多个情况下的数学期望
- UVa 11427 Expect the Expected (数学期望 + 概率DP)