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

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

时间:2018-09-27 22:17:20      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:you   cout   cstring   int   http   main   iostream   mes   double   

题意:

  初始值为1, 每次回答一个问题,如果答对初始值乘2,答错归0,结束,一共有n个问题,求在最优的策略下,最后值的期望值

解析:

  注意题中的一句话  每个问题的答对概率在t和1之间均匀分布  也就是说对于每个问题 都会出现一个概率p  

设 p0 = 2/ d[i+1]

  如果p*d[i+1] < 2i  即p < p0  也就是说 如果答这个题所带来的期望奖金少的话, 那么我们就不回答 期望奖金为2i

  如果p*d[i+1] >= 2即p >= p0 也就是说如果答这个题所带来的期望奖金多的话, 那么就回答 期望奖金为(1+p0) / 2 * d[i+1];

  技术分享图片

p1为对于当前题 正确的概率小于p0的概率  那么就不回答

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 10010, INF = 0x7fffffff;
double d[33];
int main()
{
    int n;
    double t;
    while(cin >> n >> t && n + t)
    {
        d[n] = 1 << n;
        for(int i = n - 1; i >= 0; i--)
        {
            double p0 = max(t, (1 << i) / d[i + 1]);
           // cout << p0 << endl;
            d[i] = (1 << i) * (p0 - t) / (1 - t) + d[i + 1] * (p0 + 1) * 0.5 * (1 - p0) / (1 - t);
        }

        printf("%.3f\n", d[0]);
    }

    return 0;
}

 

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

标签:you   cout   cstring   int   http   main   iostream   mes   double   

原文地址:https://www.cnblogs.com/WTSRUVF/p/9715576.html

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