题意:一个人注冊两个账号,初始rating都是0,他每次拿低分的那个号去打比赛,赢了加50分,输了扣100分。胜率为p,他会打到直到一个号有1000分为止,问比赛场次的期望。

题解:因为每次添加分数或者是降低分数都是50的倍数,因而我们能够压缩成每次赢了添加一分。输了降低2分。依据题意我们easy看出,每次分数的变化都是最小的分数进行变化的。

因而我们定义状态ans[i][j]表示从初状态到两个号的分数为i,j的期望。

我们能够知道两个号的分数的变化总是[i,i]->[i+1,i]->[i+1,i+1];每次仅仅有一个号的分数在进行变动,这样子就比較easy进行状态的转移。

定义dp[i]表示i分数到达i+1分数的期望,则状态转移方程例如以下:

dp[i] = 1×p+(1-p)*(1+dp[i-2]+dp[i-1]+dp[i]);  ans[i+1][i] = ans[i][i]+dp[i], ans[i+1][i+1] = ans[i+1][i]+dp[i];

#include <cstdio>
double ans[21][21], dp[21];
int main() {
double p;
int i, j;
while (~scanf("%lf", &p)) {
dp[0] = 1/p, dp[1] = 1+(1-p)/p*(dp[0]+1);
for (i = 2;i <= 19;i++) dp[i] = 1+(1-p)/p*(dp[i-2]+dp[i-1]+1);
ans[0][0] = 0,ans[1][0] = dp[0],ans[1][1] = ans[1][0]+dp[0];
for (i = 1;i <= 19;i++) {
ans[i+1][i] = ans[i][i]+dp[i];
ans[i+1][i+1] = ans[i+1][i]+dp[i];
}
printf("%.6lf\n", ans[20][19]);
}
}

最新文章

  1. commit(), commitNow()和commitAllowingStateLoss()
  2. 13 年的 Bug 调试经验总结
  3. 如何在Visual Studio中开发自己的代码生成器插件
  4. 在eclipse下如何安装下载好的插件
  5. [King.yue]Grid列赋值文本,隐藏Value
  6. 【Android 错误记录】Conversion to Dalvik format failed with error 1 错误
  7. Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
  8. 开源的.Net ORM微型框架SuperHelper
  9. [ios2] iOS常用控件尺寸大集合 【转】
  10. 关于json和字符串之间的转换
  11. php使用file_get_contents请求微信接口失败
  12. WPF 实现换肤功能
  13. linux configure 应用
  14. robot framework + win7 64 上的安装
  15. H5左侧滑删除简单实现
  16. Python3基础-高级用法
  17. 同步手绘板——android端取色
  18. svn 启动命令讲解
  19. golang gopacket网络抓包和分析
  20. Starting MySQL...The server quit without updating PID file [失败]local/mysql/data/localhost.localdomain.pid报错

热门文章

  1. docker容器如何安装vim
  2. mysql数据的操作
  3. 背包系列 hdu3449 有依赖背包
  4. JS——大小写转化
  5. anguar相关
  6. 关于JS闭包的一点理解
  7. 27.8 执行定时计算限制操作(Timer)
  8. Configuring SSL on Enterprise Manager and the SLB (Release 12.1.0.2 and later)
  9. [luogu4054 JSOI2009] 计数问题(2D BIT)
  10. Linux自动化之Cobbler补鞋匠安装