HDU4870:Rating(DP)

来源:互联网 发布:亚太网络法律研究中心 编辑:程序博客网 时间:2024/05/21 01:30

首先离散化,因为每场比赛分数的变化都是50的倍数,令每场赢了得1分,输了扣2分。

dp[i]表示单场比赛从i分数提高到i+1的分数的期望值,

则有:dp[i]=p+(1-p)(dp[i-2]+dp[i-1]+dp[i]+1)  

 ==>dp[i]=1/p+(1-p)/p*(dp[i-2]+dp[i-1]);dp[0]=1/p,dp[1]=1/p/p;

2个账号并没有影响 一定是一个1000 分 另一个950 所以结果是2*sum-dp[19];

#include <iostream>#include <cmath>#include <stdio.h>using namespace std;double dp[22];int main(){  double p;  while (cin>>p)  {       double sum=(1/p+1)/p;    dp[0]=1/p;    dp[1]=1/p/p;    for(int i=2;i<20;++i)      {          dp[i] = 1+(1-p)/p*(dp[i-2]+dp[i-1]+1);      sum+=dp[i];      }    printf("%.6lf\n",2*sum-dp[19]);  }}


0 0
原创粉丝点击