A Dangerous Maze (II) LightOJ - 1395(概率dp)


这题是Light Oj 1027的加强版,1027那道是无记忆的。

题意: 有n扇门,每次你可以选择其中一扇。xi为负值的门带你abs(xi)后又回到原点。xi为正值

的门则带你离开迷宫,并且你会记住你前面选择的K道门,在下次选择的时候不会选择这些门。选择每扇门的概率相等。求走出迷宫的时间期望值。

题解:

\(定义E[i] 表示记住了K道门后,显然这K道门都是为负值的门,走出迷宫的时间期望值,sum1表示为正的时间的和,sum2表示为负的时间的和,cnt表示为负的时间的个数\)

首先\(K = min(cnt,K)\)

若K == cnt,那么E[K]就相当于从正值门中随便选一道出去即可 $$E[K] = \frac{sum1}{n-cnt}$$

否则$$E[K] = \frac{sum1}{n-K} + \frac{\sum{(T负)}+(cnt - K) \cdot E[K]}{n - K}$$

对于0 <= i < K 则有 $$E[i] = \frac{sum1}{n - i} + \frac{\sum{(T负)}+(cnt - i) \cdot E[i+1]}{n - i}$$

\(\sum{(T负)}的意思是 在已经走过了K道负值门之后,再选择cnt - K道负值门的时间的和\)

但是前面的选择的K道负门 具体是怎样的我们并不知道,该怎么求呢

再来一个问题假设有n个数,先选K个数,在从剩下的数里面选择一个数的平均值是多少呢?

答案其实就是n个数的平均值

n个数先选K个再选,可以等价于先从n个中选n-K个,再选一个

考虑每个数的贡献,选完某个数,然后就从剩下n-1个中选n-k-1个呗

平均值就等于 $$\frac{\frac{1}{n-k} \cdot C(n-1,n-k-1) \cdot \sum{a_i} }{C(n,n-k)} = \frac{\sum{a_i}}{n} $$

于是$$\sum{T负} = \frac{\sum{a_负}}{cnt} \cdot (cnt - i) $$

将上式代入E[K],cnt != K那个式子化简后可得

\[E[K] = \frac{sum1}{n - cnt} + \frac{sum2 \cdot (cnt - K)}{cnt \cdot (n - cnt)}
\]

从后往前推 E[0]就是答案,注意特判cnt = n时永远无法逃出迷宫,输出-1

#include<bits/stdc++.h>
#define LL long long
using namespace std; int main()
{
int T, cas = 1;
cin>>T;
while(T--){
int n, K;
scanf("%d%d",&n,&K);
int cnt = 0,sum1 = 0,sum2 = 0, x;
for(int i = 0;i < n;i++){
scanf("%d",&x);
if(x > 0) sum1 += x;
else sum2 += -x,cnt++;
} printf("Case %d: ",cas++);
if(cnt == n) {
printf("-1\n");
continue;
}
K = min(cnt,K);
double ans = 0;
if(cnt == K) ans = sum1 / 1.0 / (n - cnt);
else ans = sum1 / 1.0 / (n - cnt) + sum2 * 1.0 * (cnt - K) / cnt / (n - cnt);
for(int i = K - 1;i >= 0;i--) {
ans = sum1 * 1.0 / (n - i) + (sum2 * 1.0 / cnt + ans) * (cnt - i) / (n - i);
}
printf("%.12f\n",ans);
}
return 0;
}

A Dangerous Maze (II) LightOJ - 1395(概率dp)的更多相关文章

  1. LightOJ - 1395 A Dangerous Maze (II) —— 期望

    题目链接:https://vjudge.net/problem/LightOJ-1395 1395 - A Dangerous Maze (II)    PDF (English) Statistic ...

  2. Where to Run LightOJ - 1287(概率dp)

    Where to Run LightOJ - 1287(概率dp) 题面长长的,看了半天也没看懂题意 不清楚的地方,如何判断一个点是否是EJ 按照我的理解 在一个EJ点处,要么原地停留五分钟接着走,要 ...

  3. LightOJ - 1151概率dp+高斯消元

    概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...

  4. LightOJ 1038 概率dp

    题意:给一个数n,每次除它的一个因子(等概率),问除到1的次数的期望是多少 题解:概率dp,对于一个数x,y是x的因子个数,因子是a1到ay,E(x)=(E(a1)+1)/y+...+(E(ay)+1 ...

  5. lightoj 1030 概率dp

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1030 #include<cstdio> #include<cstri ...

  6. LightOJ - 1079 概率dp

    题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值 题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],d ...

  7. Lights inside 3D Grid LightOJ - 1284 (概率dp + 推导)

    Lights inside 3D Grid LightOJ - 1284 题意: 在一个三维的空间,每个点都有一盏灯,开始全是关的, 现在每次随机选两个点,把两个点之间的全部点,开关都按一遍:问k次过 ...

  8. Snakes and Ladders LightOJ - 1151( 概率dp+高斯消元)

    Snakes and Ladders LightOJ - 1151 题意: 有100个格子,从1开始走,每次抛骰子走1~6,若抛出的点数导致走出了100以外,则重新抛一次.有n个格子会单向传送到其他格 ...

  9. lightoj 1408 概率dp

    https://blog.csdn.net/moon_sky1999/article/details/98097470 博主在此,牛逼神犇 #include<bits/stdc++.h> ...

随机推荐

  1. Javascript和HTML5的关系

    HTML5是一种新的技术,就目前而言,我们所知的HTML5都是一些标签,但是有了JS之后,这些标签深层的扩展功能才得以实现.       比如video标签,我们对其理解为一个简单的标签,但实际上,v ...

  2. 《JSON笔记之二》----封装JSONUtil

    许多java开发人员对于fastjson再也熟悉不过了,这是alibaba开源的依赖,使用fastjson可以使我们很容易的把请求json串转换成为我们所需要的对象.list.map等对象格式,对于开 ...

  3. redis源代码结构解析

    看了黄建宏老师的<Redis设计与实现>,对redis的部分实现有了一个简明的认识: 之前面试的时候被问到了这部分的内容,没有关注,好在还有时间,就把Redis的源码看了一遍. Redis ...

  4. Spark调优之JVM调优

    一.JVM调优 JVM: 老年代: 存放少量生命周期长的对象,如连接池 年轻代: Spark task执行算子函数自己创建的大量对象 JVM机制: 对象进入java虚拟机之后会放在eden区域和一个s ...

  5. caioj:1348: [NOIP普及组2012]质因数分解 C++

    题目描述 已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数. 输入样例 21 输出样例 7 输入 输入只有一行,包含一个正整数n. 输出 输出只有一行,包含一个正整数p,即较大的那个质数 ...

  6. [Hdu1166]敌兵布阵(CQD分治)

    CQQ分治 Code #include <cstdio> #include <cstring> #define N 50010 struct info{ int x,p,v; ...

  7. POJ3246

    Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same ...

  8. java程序——随机数求和

    设计思路:用随机算法随机生成10个数(0~100),循环填充一个数组,然后在循环中显示数组内容,接着用一个循环计算数组元素的和,将结果也显示在消息框中. 流程图: 源代码: package test; ...

  9. dubbo-admin管理控制台的安装和使用

    因为zookeeper只是一个黑框,我们无法看到是否存在了什么提供者或消费者,这时就要借助Dubbo-Admin管理平台来实时的查看,也可以通过这个平台来管理提者和消费者. dubbo下载及配置 du ...

  10. 路由vue-router基础

    目录 1. 基本例子 2. 动态路由匹配 3. 嵌套路由 4. 编程式导航 5. 命名路由 6. 命名视图 7. 重定向和别名 8. 向路由组件传递props 9. HTML5 History模式 官 ...