上一页 1 ··· 6 7 8 9 10 11 12 13 下一页
摘要: 题意:一场ACM比赛有T支队伍参加,一共有m道题,给出每个队伍解出每一道题的可能性。求每只队伍至少解决一道题,且至少有一支队伍解决的问题数大于等于n的概率。(0 7 #include 8 #include 9 10 using namespace std;11 12 #define CLR(x) memset(x, 0, sizeof(x))13 14 double p[1005][100], d[1005][40][40];15 16 int main()17 {18 int m, t, n;19 while (scanf ("%d%d%d", &m, & 阅读全文
posted @ 2013-11-17 19:00 Plumrain 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 题意:一个人在迷宫里面,这个人有f的攻击力。他一共有n条通道可供随机选择,每次等概率随机选择一条。对每条通道i有参数c[i]。选择通道k后,若f > c[k],则花费时间t[k]逃出迷宫,否则花费一天,攻击力f增加c[k],且一天之后继续选择通道。求逃出去所花费的天数的期望。其中t[k] = (int)((1+√5) * c[k]*c[k] / 2)。解法:概率DP加记忆化写法。设d[i]表示当攻击力为i逃出去所花费的天数的期望,遍历每个通道j,若i > c[j]则d[i] += t[j] / n,否则d[i] += (1 + d[i+c[j]]) / n。tag:概率DP,记忆化 阅读全文
posted @ 2013-11-17 01:06 Plumrain 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 题意:有n种卡片,每袋零食里面有p[i]的概率含有卡片i,最多含有一张卡片,也可能不含卡片。求要收集齐n张卡片所需要买的零食袋数的期望。(1 7 #include 8 #include 9 10 using namespace std;11 12 #define CLR(x) memset(x, 0, sizeof(x))13 14 double d[1= 0; -- i){28 double tmp = px;29 for (int j = 0; j < n; ++ j){30 if (!(i & (1<<... 阅读全文
posted @ 2013-11-17 00:50 Plumrain 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 题意:袋子里有w只白鼠和b只黑鼠。龙和公主轮流从袋子里抓老鼠。谁先抓到白色老师谁就赢。公主每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来。每次抓老鼠和跑出来的老鼠都是随机的。如果两个人都没有抓到白色老鼠则龙赢。公主先抓。问公主赢的概率。解法:就是最普通的概率DP,加了些限制条件。设p[i][j]表示袋子里有i只白鼠,j只黑鼠时,公主先抓公主赢的概率。 边界条件p[0][0] = 0,p[i][0] = 1,p[0][i] = 0,p[i][1] = i / (i+1)。 状态转移方程p[i][j] = i/(i+1) + j/(i+j) * (j-1)/(i+j-1) * (... 阅读全文
posted @ 2013-11-12 22:42 Plumrain 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 题意:给n个盒子,每个盒子里有一个礼物。有m个人,每个人拿起一个盒子,如果里面有礼物则将礼物取出并带走,无论里面有没有礼物都将盒子留下。问这m个人带走礼物数量的期望。解法:设d[i]表示第i个人拿盒子以后,总共带走的礼物数量的期望。d[i] = (d[i-1] + 1)* (n-d[i-1]) / n + d[i-1] * d[i-1] / n。复杂度O(m)。 虽然解法写着很简单,但是做多了概率dp的题以后,我一来就用了别的方法来设置数组,弄了半天才做出来。tag:math, 概率dp 1 /* 2 * Author: Plumrain 3 * Created Time: 201... 阅读全文
posted @ 2013-11-12 22:28 Plumrain 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题意:对于每一格,都可以往右走,原地不走,往下走,概率分别为a[i],b[i],c[i](每一个格子与其他格子的概率不一定相同)。在R*C的棋盘上(输入数据保证不会走出棋盘),求从(0, 0)走到(R-1, C-1)所需要的步数*2的期望是多少。解法:就是最普通的dp,从(R-1, C-1)往(0, 0)算就好。设dp[i][j]表示达到目标状态的步数期望*2。dp[i][j] = dp[i][j]*a[k] + dp[i][j+1]*b[k] + dp[i+1][j]*c[k]。注意,如果a[k]= 1,应该直接dp[i][j] = 0; continue。tag: 概率DP, 水题 1 / 阅读全文
posted @ 2013-11-09 20:39 Plumrain 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 题意:激活游戏需要排队,排队时,每次操作可能发生如下情况:1、队首的人激活失败,则队伍顺序不变,等待下次操作,概率为p1;2、队首的人掉线了,则他重新排队成为队尾,其他人顺次向前移,概率p2;3、队首的人激活成功,则他出队,其他人顺次向前移,概率p3;4、机器死机,则所有人都不能再激活,队伍顺序维持原状,概率p4。给定n,m,k,初始时,队列一共有n个人,小明排在第m位,问机器死机且死机时小明在队列中且小明前面的人数量不多于k-1个时的概率。解法:概率DP。虽然求的不是期望是概率,但和求期望的递推思路是一样的。设d[i][j]表示现在有i个人排队,小明排在第j位,要转移到目标状态的概率。状态转 阅读全文
posted @ 2013-11-01 11:21 Plumrain 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 题意:玩飞行棋,棋盘有0~n共n+1,每次抛一个6面的骰子,若得到x(1= n时,游戏结束。求抛骰子次数的期望。解法:就是很简单的概率DP加了一点限制条件,用map处理一下就好。具体看代码。tag:math, 概率DP 1 /* 2 * Author: Plumrain 3 * Created Time: 2013-10-30 11:17 4 * File Name: DP-HDU-4405.cpp 5 */ 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 13 using namespace ... 阅读全文
posted @ 2013-10-30 12:18 Plumrain 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 题意:给定n,k1,k2,k3,a,b,c七个数。有三个骰子,第一个骰子有k1个面,第二个有k2个面,第三个有k3个面,摇骰子得到的点数即为摇动后向上的面的点数,每一个面向上的概率相同。一个人的分数记为count,初始时count=0,然后同时摇三个骰子记为一次摇动,每次摇动之后,三个骰子分别得到x1,x2,x3点,若x1=a且x2=b且x3=c,则count=0,否则,count += x1+x2+x3。若count > n,则游戏结束,否则继续游戏。问摇动次数的期望。解法:在做了POJ 2096 Collecting Bugs之后,已经大概懂得怎样用DP处理期望问题了。DP求概率要正 阅读全文
posted @ 2013-10-30 10:56 Plumrain 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 题意:给定n和s,一共有s个系统和n个bug种类,每个bug只可能属于某一种bug,也只属于某一个系统。但是由于每个系统都有无限多个bug,每种bug也有无限多个,所以每次发现的bug是哪一种bug的可能性一样,属于哪个系统的可能性也一样。问平均发现多少个bug以后,每个系统都有bug被发现了,每个种类的bug都有被发现。解法:概率DP的入门题。。。。。不会T T。 设d[i][j]表示发现了i个系统的bug,j个种类的bug,要到达目标状态还需要的天数的期望。 则d[i][j]可以转化为:1、d[i][j],转化为此情况的概率是i*j / (n*s);2、d[i+1][j],概率为(... 阅读全文
posted @ 2013-10-29 18:48 Plumrain 阅读(246) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 下一页