聚烷撑乙二醇(数学+期望)

problem

n n n 个随机数生成器,第 i i i 个生成器可以均匀随机地生成 [ L i , R i ] [L_i,R_i] [Li,Ri] 内的一个实数

现在你要玩个游戏,从第 1 1 1 个生成器到第 n n n 个生成器,每次当前生成器会生成一个数,你需要选择

  1. 相信鲁迅,拿走这个数,游戏结束。
  2. 相信鲁迅,放弃这个数和这个生成器,使用下一个生成器(前提是下一个生成器必须存在)。

求使用使得期望答案最大的策略时,期望答案是多少。

solution

observation:对于一个均匀随机生成 [ L i , R i ] [L_i,R_i] [Li,Ri] 的生成器,生成数的期望为 L i + R i 2 \frac{L_i+R_i}{2} 2Li+Ri

显然,如果上一个生成器产生的期望为 x x x,下一个生成器产生数的期望 y y y,且 x < y x<y x<y,肯定是选择下一个生成器。

更一般地,从后往前推。

f i : f_i: fi: 从第 i i i 个生成器开始游戏得到的最大期望。

比较与 L i − 1 , R i − 1 L_{i-1},R_{i-1} Li1,Ri1 的大小关系。

  • f i > R i − 1 f_{i}>R_{i-1} fi>Ri1,则 f i − 1 = f i f_{i-1}=f_{i} fi1=fi
  • f i < L i − 1 f_{i}<L_{i-1} fi<Li1,则 f i − 1 = L i − 1 + R i − 1 2 f_{i-1}=\frac{L_{i-1}+R_{i-1}}{2} fi1=2Li1+Ri1
  • otherwise \text{otherwise} otherwise k = f i − L i − 1 R i − 1 − L i − 1 ⇒ f i − 1 = k ∗ f i + ( 1 − k ) ∗ ( f i + R i − 1 ) 2 k=\frac{f_{i}-L_{i-1}}{R_{i-1}-L_{i-1}}\Rightarrow f_{i-1}=k*f_{i}+(1-k)*\frac{(f_i+R_{i-1})}{2} k=Ri1Li1fiLi1fi1=kfi+(1k)2(fi+Ri1)

计算方法就是加权平均。

code

#include <cstdio>
#include <iostream>
using namespace std;
#define double long double
#define maxn 1000005
#define eps 1e-7
int n;
double l[maxn], r[maxn], f[maxn];

int main() {
    freopen( "pag.in", "r", stdin );
    freopen( "pag.out", "w", stdout );
    scanf( "%d", &n );
    for( int i = 1;i <= n;i ++ ) scanf( "%Lf %Lf", &l[i], &r[i] );
    f[n] = ( l[n] + r[n] ) / 2;
    for( int i = n - 1;i;i -- ) {
        if( f[i + 1] - r[i] >= eps ) f[i] = f[i + 1];
        else if( f[i + 1] - l[i] >= eps ) {
            double k = ( f[i + 1] - l[i] ) / ( r[i] - l[i] );
            f[i] = k * f[i + 1] + ( 1 - k ) * ( r[i] + f[i + 1] ) / 2;
        }
        else f[i] = ( l[i] + r[i] ) / 2;
    }
    double ans = 0;
    for( int i = 1;i <= n;i ++ ) ans = max( ans, f[i] );
    printf( "%.5Lf\n", ans );
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值