码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4870 Rating (2014 多校联合第一场 J)(概率)

时间:2015-07-18 13:50:30      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

题意:

一个人有两个TC的账号,一开始两个账号rating都是0,然后每次它会选择里面rating较小的一个账号去打比赛,每次比赛有p的概率+1分,有1-p的概率-2分,当然如果本身是<=2分的也就还是回到0分。然后问最后其中一个账号到达20分时需要打多少次比赛。

 

思路:

因为每次50分,到达1000分,所以可以看做每次1分,到达20分
dp[i]表示i到20的数学期望
那么dp[i] = dp[i+1]*p+dp[i-2]*q+1;
令t[i] = dp[i+1]-dp[i]
则t[i] = (t[i+1]*p+t[i-2]*q)
所以t[i+1] = (t[i]-t[i-2]*q)/p

 

代码:

 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 //t[i]为从i分到i+1分需要的比赛次数期望
 5 int main()
 6 {
 7     double t[21],dp[21];
 8     double p,q,sum;
 9     while(scanf("%lf",&p)!=EOF)
10     {
11         sum = 0;
12         q = 1-p;
13         t[0] = 1/p;
14         t[1] = t[0]/p;
15         t[2] = t[1]/p;
16         sum =t[0]+t[1]+t[2];
17         for(int i=3;i<20;i++)
18         {
19             t[i]=(t[i-1]-t[i-3]*q)/p;
20             sum+=t[i];
21         }
22         //sum为一个账号达到20分的平均比赛次数
23         printf("%.6lf\n",2*sum-t[19]);//按照比赛规则,一个账号到20分的比赛次数=两个账号到20分的次数减去一个账号从19分到二十分的比赛次数
24     }
25     return 0;
26 }

 

HDU 4870 Rating (2014 多校联合第一场 J)(概率)

标签:

原文地址:http://www.cnblogs.com/PJQOOO/p/4656694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!