hdu4870Rating 概率dp
2015-09-06 13:40
281 查看
//两个账号 , 每次选rating小的去比赛 //每次比赛rating可能加50 , 可能减100(最多剪到0) //问刚开始两个比赛的rating都为0 到其中一个账号大于1000的期望 //只考虑一个账号情况 , // dp[0] = p*dp[1] + (1-p)dp[0] + 1 <==> dp[0] = dp[1] + 1/p // dp[1] = p*dp[2] + (1-p)dp[0] + 1 <==> dp[2] = dp[1] + 1/(p*p) = dp[0] + 1/p + 1/(p*p) // 设 dp[k] = dp[0] + t[k] t[k]表示从0到k的期望值 // dp[k] = p*dp[k+1] + (1-p)dp[k-2] + 1 ; //所以 t[k+1]=1/p+1/p*t[k]-(1-p)/p*t[k-2] //边界条件是 t[0]=0,t[1]=1/p,t[2]=1/p+1/p^2 //考虑两个账号 , 必然是(0,0) ==> (0 , 1) ==> (1 , 1) ==>(1 , 2) ... ==> (19 , 20) //其期望值为 t[1] - t[0] t[1]-t[0] t[2] - t[1] t[20] - t[19] //加起来为 t[19] + t[20] - 2*t[0] #include<cstdio> #include<iostream> #include<cstring> using namespace std ; const int maxn = 30 ; double t[maxn] ; int main() { double p ; while(~scanf("%lf" , &p)) { t[0] = 0 ; t[1] = 1.0/p ; t[2] = 1.0/p + 1.0/(p*p) ; for(int i = 3;i <= 20;i++) t[i] = 1.0/p + 1.0/p*t[i-1] - (1.0-p)*t[i-3]/p ; printf("%.6lf\n" , t[19] + t[20]) ; } return 0 ; }
相关文章推荐
- Unity3d通用工具类之解压缩文件
- 理解maven的核心概念
- HDU 3234 - Exclusive-OR(并查集)
- 字符串按照单词逆序的两种实现
- Oracle GoldenGate 简介 数据库同步 异地复制方案
- Lua5.0 语法分析
- UI初级之界面特殊处理技巧一
- 计算机底层是如何访问显卡的?
- poj1113Wall【凸包】
- 程序员的自我修养
- Linux使用dd命令测试硬盘读写速度
- 简单电话本程序
- 【问题解决】imread读不出图片
- CCF 2015-03-3 节日
- jquery京东商城双11焦点图多图广告特效代码分享
- 为什么学java开发?
- hdu 4888 Redraw Beautiful Drawings 最大流唯一性判断
- 在oninitdialog后添加初始化变量
- error: C2248: “QVariant::QVariant”: 无法访问 private 成员(在“QVariant”类中声明)
- C# 静态类