摘要: 题意:一个人若连续进k1个球或连续不进k2个球,游戏结束,给出这个人进球的概率p,求到游戏结束时这个投球个数的期望。 进球概率为p,不进概率 q=1-p 设 f[i] 表示连续 i 次不进距离连续k2次不进结束的期望,t[i]表示连续 i 次进球,距离连续k1次进球结束的期望。显然,f[k2]=p[k1]=0; f[i] = q*(f[i+1]+1)+p*(1+t[1]) , t[i] = p*(t[i+1]+1)+q*(1+f[1]). 答案是 p*t[1]+q*f[1]+1. 然后就算t[1],f[1]去吧~~数学不好的人伤不起啊#include#includeint mai... 阅读全文
posted @ 2013-08-10 22:32 yongren1zu 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 负二项分布:又称帕斯卡分布。 它表示,已知一个事件在伯努利试验中每次的出现概率是p,在一连串伯努利试验中,一件事件刚好在第r+k次实验中出现第r次的概率。 题意:有两罐糖果,初始化每罐有n个糖果,每次取第一罐糖果的概率是p,则另一罐是1-p,求当打开一罐发现为空时,另一罐糖果数目的期望。 直接计算会向下溢出。#include#includeint n;double p,q;double f[400005];double logC(int m,int n){ return f[m]-f[n]-f[m-n];}int main(){ int cas=1; f[0]=0;... 阅读全文
posted @ 2013-08-10 16:39 yongren1zu 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 题意:给你n个骰子,求n个骰子的和不小于x的概率。 刚开始想每给一组数就计算一次~~太笨了- -,看了别人的代码,用dp,而且是一次就初始化完成,每次取对应的数据就行了。WA了好多次啊,首先不明白的就是:for(int i=1;i=0;j--) dp[i][j]+=dp[i][j+1]; 这段代码不清楚干什么用的,想清楚没? 刚开始求的dp[i][j]表示的是前 i 个骰子掷出总和为 j 的概率 ,题意让求总和不小于 j 的概率,所以把大于 j 的要加上。 然后输出的又WA了好几次~~ 有概率为0和1的情况,就不能输出分数形式。#include#include#define N ... 阅读全文
posted @ 2013-08-10 14:47 yongren1zu 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 题意:一个长为n+1的格子,初始位置在0,记为i,每掷一次骰子得到一个数j,位置移动到i+j,当位置(i+j)>=n时游戏结束,问掷骰子次数的数学期望。 a[i] 表示从位置 i 到游戏结束的次数的期望,因为有飞机~~, fly[i]=j,表示 i 飞到 j 。 a[n]=0,然后倒着计算,最后答案是a[0].#include#include#define maxn 100010double a[maxn];int fly[maxn];int main(){ int n,m; int x,y; while(scanf("%d%d",&n,&m) &am 阅读全文
posted @ 2013-08-10 13:41 yongren1zu 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 题意:给出银行的个数和被抓概率上限。在给出每个银行的钱和抢劫这个银行被抓的概率。求不超过被抓概率上线能抢劫到最多的钱。 dp题,转移方程 dp[i][j] = min(dp[i-1][j] , dp[i-1][j-v[i]]) ,dp[i][j]表示前 i 个银行抢劫到 j 这么多钱被抓的概率。 初始化时 dp[0][0] = 0 , 因为 dp[0][1~n]是不可能的情况,dp[0][1~n]=-1。 #include#define maxn 110#define min(a,b) (a)>(b)?(b):(a)double a[maxn];int v[maxn];double f. 阅读全文
posted @ 2013-08-09 23:36 yongren1zu 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个数,用这个数的因数除以这个数,直到为1时,求除的次数的期望。 设一个数的约数有M个,E[n] = (E[a[1]]+1)/M+(E[a[2]]+1)/M+...+(E[a[M]]+1)/M 一个数最大的约数是它自己。 则有,E[n] = (E[a[1]]+1)/M+(E[a[2]]+1)/M+...+(n+1)/M (M-1)*E[n]=E[a[1]]+E[a[2]]+...+E[a[M-1]]+M#include#include#define maxn 100010double dp[maxn];void Init(){ dp[1]=0; for(int ... 阅读全文
posted @ 2013-08-09 23:19 yongren1zu 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个一年的天数,求最少多少人可以使至少两人生日同一天的概率不少于0.5。 用二分去做。检验一个数是否符合时,刚开始实用普通的方法,直接计算,超时了~~,上网搜了一下代码,一位大神使用一个数组保存n!,因为阶乘的上升速度太快,100!就已经很大了,题目范围是到10W,直接保存肯定是要超啊~~,取对数就可以了。 #include#include#define maxn 100010double s[maxn],t;double fun(int num,int y){ return s[y]-((s[y]-s[y-1])*num+s[y-num]);}int check(in... 阅读全文
posted @ 2013-08-09 23:16 yongren1zu 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 递推,倒着递推。 #include#define maxn 1010#define min(a,b) (a)>(b)?(b):(a)int main(){ int T,n,cas=1; int a[maxn]; double f[maxn]; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); f[n]=a[n]; for(int i=n-1;i;i--) { ... 阅读全文
posted @ 2013-08-09 16:15 yongren1zu 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 一道数学期望题,唉唉,概率论学的不好啊~~ 求走出迷宫的期望时间。 由于有的门会回到起点,所以有可能会走很多遍,设能走出去的门的个数为n1,总的个数为n,那么一次走出去的概率为n1/n,走一次的用的平均时间是sum(t)/n,期望的次数为n/n1。 时间期望是:(sum(t)/n)*(n/n1)=sum(t)/n1。#includeint gcd(int a,int b){return b?gcd(b,a%b):a;}int main(){ int T,cas=1;; int n,n1,sum,a; scanf("%d",&T); while(T--) ... 阅读全文
posted @ 2013-08-09 14:59 yongren1zu 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 1.求重复子串: (1).可重叠最长重复子串 做法简单,只要求出height数组中的最大值即可。首先求最长重复子串,等价与求两个后缀数组的最长公共前缀。 (2).不可重叠最长重复子串 把排序后的后缀分成若干组,其中每组的后缀之间的height值不小于k。例如,字符串为“aabaaaab”,当k=2时,后缀分成4组,如图所示: 有希望成为最长公共前缀不小于k的两个后缀一定在同一组。然后对于每组后缀,只须判断每个后缀的sa 值的最大值和最小值之差是否不小于k。如果有一组满足,则说明存在,否则不存在。 (3).子串的个数 求不相同的子串的个数。 如果所有的后缀按 suffix... 阅读全文
posted @ 2013-08-05 22:05 yongren1zu 阅读(2302) 评论(0) 推荐(0) 编辑