HDU 4870 Rating(概率、期望、推公式) && ZOJ 3415 Zhou Yu

其实zoj 3415不是应该叫Yu Zhou吗。。。碰到ZOJ 3415之后用了第二个参考网址的方法去求通项,然后这次碰到4870不会搞。参考了chanme的,然后重新把周瑜跟排名都反复推导(不是推倒)四五次才上来写这份有抄袭嫌疑的题解。。。

这2题很类似,多校的rating相当于强化版,不过原理都一样。好像是可以用高斯消元做,但我不会。默默推公式了。

公式推导参考http://www.cnblogs.com/chanme/p/3861766.html#2993306

http://www.cnblogs.com/lijunle/archive/2010/10/09/1846577.html

各有不同,现在感觉第一个比较好理解。

HDU 4870 Rating

先考虑只注册一个帐号的情况(求的是初始e[0],即0到20的期望,有e[20]=0)

e[0] = p*e[1]+(1-p)*e[0] +1  ==>   e[0] = e[1] +1/p

e[1] = p*e[2]+(1-p)*e[0] +1  ==>   e[0] = e[2] +1/p+1/(p*p)

e[2] = p*e[3]+(1-p)*e[0] +1

e[n-1] = p*e[n]+(1-p)*e[n-3]+1

e[n] = 0

显然,可以知道,e[0] = e[k] + t[k]。(因为每一次代入后,e[0]跟e[k]都会是乘上系数p)

代入一般情况下的,e[k] = p*e[k+1]+(1-p)*e[k-2]+1,-t[k] = p*(-t[k+1])+(1-p)*(-t[k-2])+1

所以有了t[0]=0,t[1]=1/p,t[2]=1/(p*p)以及t[k],t[k+1],t[k-2]的关系,可以求出所有t[i]

而2个帐号的时候,由于每次取rating小的参赛,必然是这样的结果(0,0)=>(1,0)=>(1,1)=>(2,1)=>....=>(19,19)=>(20,19)

而t[k]表示的是一个帐号从0到达k的期望时间,所以答案上t[20]+t[19]。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 using namespace std;
 5
 6 int main(){
 7     double p,t[22];
 8     while(~scanf("%lf",&p)){
 9         t[0]=0,t[1]=1./p,t[2]=1./p+1./(p*p);
10         for(int i=3;i<=20;++i) t[i] = (1./p+1./p*t[i-1]-(1-p)/p*t[i-3]);
11         printf("%.6lf\n",t[19]+t[20]);
12     }
13     return 0;
14 }

虽然觉得写完之后跟参考的非常非常非常……非常非常非常类似。。。

ZOJ 3415 Zhou Yu

(求的是初始e[n],即n到0的期望,有e[0]=0)

类似的方法,不想打推导过程了。。。

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4
 5 double pp(double a,int n){
 6     double ret=1;
 7     while(n){
 8         if(n&1) ret *= a;
 9         a*=a;
10         n>>=1;
11     }
12     return ret;
13 }
14  int main(){
15      int n,m;
16      while(~scanf("%d%d",&n,&m)){
17          if(m==2){printf("%.10lf\n",1.*n*(n+1));continue;}
18          double ans = 1.*m/(m-2)/(m-2);
19          double tmp = pp(1./(m-1),n) + 1.*n*(m-2) - 1;
20          printf("%.10lf\n",ans*tmp);
21      }
22      return 0;
23  }

HDU 4870 Rating(概率、期望、推公式) && ZOJ 3415 Zhou Yu,布布扣,bubuko.com

时间: 2024-10-20 04:34:46

HDU 4870 Rating(概率、期望、推公式) && ZOJ 3415 Zhou Yu的相关文章

hdu 4870 Rating(概率DP&amp;高数消元)

Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 714    Accepted Submission(s): 452 Special Judge Problem Description A little girl loves programming competition very much. Recently, she

HDU 4870 Rating 概率DP

Rating Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4870 Description A little girl loves programming competition very much. Recently, she has found a new kind of programming competition named

HDU dice DP求期望+推公式

题意: 一个m边形的骰子,求连续投出n个相同的面,和m个两两不同的面的期望次数. solution: 令\(f_i\)表示已经连续投出i个相同的面,到连续投出n个还需要的期望次数. 令\(g_i\)类似的表示第二种问题的期望次数. 对于\(f_i\) ,有两种情况: ① 投出了和前i个相同的面,转移到了\(f_{i+1}\) ,那么\(f_i+=(f_{i+1}+1)*\frac{1}{m}\) ② 投出了一个不同的面,转移到了\(f_1\),那么\(f_i+=(f_1+1)*\frac{m-1

2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)

题目链接 题意 :小女孩注册了两个比赛的帐号,初始分值都为0,每做一次比赛如果排名在前两百名,rating涨50,否则降100,告诉你她每次比赛在前两百名的概率p,如果她每次做题都用两个账号中分数低的那个去做,问她最终有一个账号达到1000分需要做的比赛的次数的期望值. 思路 :可以直接用公式推出来用DP做,也可以列出210个方程组用高斯消元去做. (1)DP1:离散化.因为50,100,1000都是50的倍数,所以就看作1,2,20.这样做起来比较方便. 定义dp[i]为从 i 分数到达i+1

hdu 4870 Rating

Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 414    Accepted Submission(s): 261 Special Judge Problem Description A little girl loves programming competition very much. Recently, she

HDU 4870 Rating(高斯消元)

HDU 4870 Rating 题目链接 题意:一个人注册两个账号,初始rating都是0,他每次拿低分的那个号去打比赛,赢了加50分,输了扣100分,胜率为p,他会打到直到一个号有1000分为止,问比赛场次的期望 思路:f(i, j)表示i >= j,第一个号i分,第二个号j分时候,达到目标的期望,那么可以列出转移为f(i, j) = p f(i', j') + (1 - p) f(i'' + j'') + 1 f(i', j')对应的是赢了加分的状态,f(i'', j'')对应输的扣分的状态

HDU 4870 Rating(高斯消元 )

HDU 4870   Rating 这是前几天多校的题目,高了好久突然听旁边的大神推出来说是可以用高斯消元,一直喊着赶快敲模板,对于从来没有接触过高斯消元的我来说根本就是一头雾水,无赖之下这几天做DP,正好又做到了这个题,没办法得从头开始看,后来在网上找了别人的高斯消元的模板后发现其实也还是很好理解,就是先构造一个增广矩阵,然后化行阶梯形,最后迭代求解 首先有一个介绍高斯消元感觉过于详细的博客http://blog.csdn.net/tsaid/article/details/7329301 首

HDU 4870 Rating 高斯消元法

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 题意:用两个账号去參加一种比赛,初始状态下两个账号都是零分,每次比赛都用分数低的账号去比赛.有P的概率取胜,相应账号分数上涨50分,否则相应账号分数下降100分,问当有一个账号分数达到1000分时參加比赛次数的数学期望是多少. 思路:比赛期间以为是一道推公式的题,推了半天没什么收获. 赛后想了想.看了解题报告以后.知道了这样的每一个分数相应状态受到两个状态以上推得而且不是从后向前推得情况能够用高斯

sgu495:概率dp / 推公式

概率题..可以dp也可以推公式 抽象出来的题目大意: 有 n个小球,有放回的取m次  问 被取出来过的小球的个数的期望 dp维护两个状态 第 i 次取出的是 没有被取出来过的小球的 概率dp[i] 和取出的是已经被取出来过的小球的概率np[i]; 如果第 i-1 次取出的是已经被取出来过的小球 那么第 i 次取出没有取出来过小球的概率即为 dp[i-1]: 反之则为 dp[i-1] - 1/n(没有取出来过的小球少了一个) 所以可以得到状态转移方程 dp[i]=dp[i-1]*(dp[i-1]-