UVA - 10900 So you want to be a 2n-aire?(连续概率)

首先看一个问题,当p为定值时,

则以d[ i ] 表示已经答对 i 题,后的最大期望值 d[ i ] = max(2^i , d[ i+1 ] * p);

则改题目结果为 d[ i ] 在 t - 1 上积分,由于其为均匀分布,积分很好积,还有一个问题 第一开始认为 p 的期望为 (1+t)/2; 直接用该值计算了,但其与上述积分式并不等价

#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
long long c[41];
double d[45];
int main()
{
  c[0]=1;
  for(int i=1;i<=40;i++) c[i]=c[i-1]*2;
  double t,p0;
  int n;
  while(scanf("%d %lf",&n,&t)==2){
       if(!n) break;
       d[n]=c[n];
       for(int i=n-1;i>=0;i--){
           double p0 = max(t,c[i]/d[i+1]);
           double p1 = (p0-t)/(1-t);
           d[i]=p1*c[i]+(1.0 - p1)*(p0+1)/2.0*d[i+1];
       }
       printf("%.3lf\n",d[0]);
  }
  return 0;
}


你可能感兴趣的:(UVA - 10900 So you want to be a 2n-aire?(连续概率))