51NOD算法马拉松11 B君的竞技场
来源:互联网 发布:广联达算量软件下载 编辑:程序博客网 时间:2024/04/30 02:54
传送门
这题我在比赛的时候竟然没有想出来,真是……
这道题我们可以想一想怎么搞定获胜的概率p。
我们发现再怎么这个p都是搞不了的。所以我们可以积一下分,然后就可以不用去管p了。我们要做的就是求出一个关于p的多项式。
我们又发现,对于整体的期望,并不好直接表示出来(是可以表示出来的)。所以我们就想一想怎么去递推吧。
设
然后,我们枚举所有的
#include <cstdio>#include <cstring>#include <cmath>#define MAXN 45struct Pol { double a[MAXN]; Pol(){ memset(a, 0, sizeof a); } Pol operator * (const Pol&B) { Pol c; memset(c.a, 0, sizeof c.a); for(int i = 0; i < MAXN; ++ i) for(int j = 0; j <= i; ++ j) { c.a[i] += a[i-j] * B.a[j]; } return c; } Pol operator + (const Pol&B) { Pol c; for(int i = 0; i < MAXN; ++ i) c.a[i] = a[i] + B.a[i]; return c; } void getPre() {//积分 for(int i = MAXN-1; i > 0; -- i) a[i] = a[i-1]/i; a[0] = 0; } double Get_Ans() { getPre(); double ans = 0; for(int i = 1; i < MAXN; ++ i) ans += a[i]; return ans; }}f[MAXN][MAXN], p, _p;int n, m;int main() { scanf("%d%d", &n, &m); f[0][0].a[0] = 1; p.a[1] = 1; _p.a[0] = 1; _p.a[1] = -1; for(int i = 0; i < n; ++ i) for(int j = 0; j < m; ++ j) { if(i > 0) f[i][j] = f[i-1][j] * p; if(j > 0) f[i][j] = f[i][j] + (f[i][j-1] * _p); } double ans = 0; for(int i = 0; i < m; ++ i) { f[n][i] = f[n-1][i] * p; ans += f[n][i].Get_Ans() * n; } for(int i = 0; i < n; ++ i) { f[i][m] = f[i][m-1] * _p; ans += f[i][m].Get_Ans() * i; } printf("%lf\n", ans);}
0 0
- 51NOD算法马拉松11 B君的竞技场
- 51nod 1630 B君的竞技场
- 51Nod-1630-B君的竞技场
- 51NOD 算法马拉松15(脱欧专场) B君的游戏(博弈)
- 51NOD 1632 B君的连通(推公式)——算法马拉松16
- 51nod1630 B君的竞技场
- 51Nod 算法马拉松7 B选数字
- 51nod 算法马拉松7 B.选数字
- 【51Nod算法马拉松18 B】非010串
- 51nod算法马拉松19 B 最小集合
- [递推] 51nod 算法马拉松25 B. 完美序列
- 51nod 算法马拉松11 D 计算
- 51Nod-算法马拉松23-B-谷歌的恐龙(数学期望)
- 51Nod-算法马拉松23 B 谷歌的恐龙 [概率期望]【数学】
- 51nod 算法马拉松12
- 51nod算法马拉松20
- 51Nod 算法马拉松23
- 51Nod 算法马拉松24
- session令牌防止表单重复提交
- x86—EFLAGS寄存器详解
- contos安装laravel
- 如何取消tortoiseSVN的管理
- 第五届_李白打酒
- 51NOD算法马拉松11 B君的竞技场
- 图像验证码识别(八)——字符归一化
- 模式识别相似性测度距离计算---欧式距离
- 骑士问题
- ViewPager实现Gallery的画廊效果 突显中间 虚化两边的界面
- Android自定义View控件
- Android Studio——Android Studio更新升级方法
- Android仿美团筛选菜单
- cntk学习日志(一)