【题解】闯关游戏

2023-11-06

题目描述

  艾伦正在闯关。游戏有N个关卡,按照必须完成的顺序编号为1到N。每个关卡可以用两个参数来描述:prob [i]和value [i]。这些参数的含义如下:

  每当艾伦尝试闯第i关时,他要么顺利通过,要么“挂掉”。他完成该关卡的概率总是prob [i] / 1000。(他总是尽力完成每个关卡。)在关卡i的末尾有一个宝箱,其中包含价值 value[i]单位的黄金。当艾伦完成关卡时,他从拿起该关卡的金币。

  初始化时,艾伦从第1级关卡开始,艾伦没有黄金。对于每个有效的i,每当Allen完成关卡i时,他就会继续进行关卡i + 1,一旦完成第N个关卡,游戏就会结束。

  每当艾伦“挂掉”时,下面4件事情会按顺序发生:

        1、除了艾伦携带的黄金,其他黄金都被从游戏中移除。

        2、艾伦目前所携带的所有黄金都“坠落”,“坠落”的地点就是艾伦“挂掉”的那个关卡的开头处。一旦艾伦以后再次达到这个关卡,即使在尝试闯该关卡之前,他也能够再次“捡起”上次“坠落”到这个地方的黄金。(请注意,如果他在到达这个关卡之前再次“挂掉”,这些黄金将永远消失。)

        3、所有箱子都添加了新的黄金,各个箱子黄金的量就是它们最初所含的量(相当于初始化各个箱子的黄金量)。

        4、艾伦回到了第1级的开头,且他没有携带金币。艾伦有无限条“生命”,“挂掉”后可以重新开始游戏。

  通过上面的规则可以发现,艾伦“挂掉”后,最多只有一堆金币不在宝箱中,这一堆金币的位置就是艾伦最近“挂掉”所在的关卡的开头处。

  为了避免精确错误,数据保证艾伦在一次性闯关全部成功的情况下赢得整个游戏的概率将至少为10 ^( - 6)。你的任务是输出艾伦顺利闯完第N关时所携带的黄金的期望值。

 

输入格式

  多组测试数据。

  第一行,一个整数G,表示有G组测试数据。1 <= G <= 5。

  每组数据格式:

       第一行,一个整数N。2 <= N <= 1000。

       第二行,N个整数,第i个整数是prob[i]。1 <= prob[i] <= 1000。

       第三行, N个整数,第i个整数是value[i]。1 <= value[i] <= 1000。

 

输出格式

  共G行,每行一个实数。答案误差不能超过0.00001.

 

输入样例

5

2

1000 500 

3 4 

2

1000 1 

3 4 

5

500 500 500 500 500 

1 2 3 4 5 

91

916 932 927 988 958 996 944 968 917 939 960 965 960 998 920 990 915 972 995 916 902 968 970 962 922 959 994 915 996 996 994 986 945 947 912 946 972 951 973 965 921 910 938 975 942 950 900 983 960 998 982 980 902 974 952 938 900 962 920 931 964 974 953 995 946 946 903 921 923 985 919 996 930 915 991 967 996 911 999 936 1000 962 970 929 966 960 930 920 958 926 983 

583 428 396 17 163 815 31 536 175 165 532 781 29 963 331 987 599 497 380 180 780 25 931 607 784 613 468 140 488 604 401 912 204 785 697 173 451 849 714 914 650 652 338 336 177 147 22 652 901 548 370 9 118 487 779 567 818 440 10 868 316 666 690 714 623 269 501 649 324 773 173 54 391 745 504 578 81 627 319 301 16 899 658 586 604 83 520 81 181 943 157 

2

250 750 

1000 1 

 

输出样例

10.0

3003.9999999999977

16.626830517153095

54204.93356505282

1067.6666666666667

 

题解

  容易想到,当玩家在第$i$关挂掉时,如果他再次挂掉的关卡$j$满足$j<i$,那么他在第$i$关掉落的金币就消失了。

  这样我们可以看出,设$dp[i]$为第$i+1$关挂掉的期望值,那么能对$dp[i]$做出贡献的只有满足$j<i$的$dp[j]$。

  我们设$f[i]$为第$i+1$关挂掉的概率,容易得到$f[i]=\prod_{j=1}^{i}p[j] \times (1-p[i+1])$, 则$dp[i] = \sum_{j = 1}^{i} a[j] + \sum_{j = 1}^{i} f[j] \times dp[j]$,整理得到$dp[i] = \frac{\sum_{j = 1}^{i} a[j] + \sum_{j = 1}^{i - 1} f[j] \times dp[j]}{1 - f[i]}$。

#include <iostream>
#include <cstdio>

#define MAX_N (1000 + 5)

using namespace std;

int G;
int n;
double p[MAX_N];
double f[MAX_N];
double a[MAX_N];
double dp[MAX_N];
double s[MAX_N];

int main()
{
    cin >> G;
    while(G--)
    {
        cin >> n;
        p[0] = 1;
        for(register int i = 1; i <= n; ++i)
        {
            cin >> p[i];
            p[i] /= 1000;
            f[i - 1] = p[i - 1] * (1 - p[i]);
            p[i] *= p[i - 1];
        }
        f[n] = 0;
        for(register int i = 1; i <= n; ++i)
        {
            cin >> a[i];
            a[i] += a[i - 1];
        }
        for(register int i = 1; i <= n; ++i)
        {
            dp[i] = (a[i] + s[i - 1]) / (1 - f[i]);
            s[i] = dp[i] * f[i] + s[i - 1];
        }
        printf("%lf\n", dp[n]);
    }
    return 0;
}
参考程序

 

转载于:https://www.cnblogs.com/kcn999/p/10755800.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【题解】闯关游戏 的相关文章

  • 推荐一款最强Python自动化神器!不用写一行代码!

    搞过自动化测试的小伙伴 相信都知道 在Web自动化测试中 有一款自动化测试神器工具 selenium 结合标准的WebDriver API来编写Python自动化脚本 可以实现解放双手 让脚本代替人工在Web浏览器上完成指定的操作 虽然se
  • vue实现点击按钮刷新页面的方法:

    1 简单方法 第一种 使用location对象的reload 方法 window location reload 第二种 使用编程式导航 this router go 0 2 使用vue中provide和inject 推荐 在app vue
  • YOLO技术概要学习笔记3——YOLOV4到YOLOV8

    目录 一 前言 二 YOLOv4 1 一个集成了 Bag of Specials BoS 的增强架构 2 集成了Bag of freebies BoF 的高级训练方法 3 自我对抗训练 SAT 4 遗传算法进行超参数优化 三 YOLOv5
  • 如何反转一个单链表java

    目标 反转前 1 gt 2 gt 3 gt 4 反转后 4 gt 3 gt 2 gt 1 思维 思维关键点 1 关键点一 本质 两两相邻的节点 的指向变反了而已 清晰的抓本质 箭头方向的改变 这样才能写出简单代码 2 关键点二 指针工具 做
  • 【FPGA约束详解】——从入门到精通

    FPGA约束详解 从入门到精通 FPGA约束是FPGA设计中非常重要的一环 它能够限制和规范电路的行为 确保信号的稳定性和正确性 在FPGA的设计过程中 约束有许多种类 本文将对常见的五种约束进行详细介绍 时钟约束 时钟约束是最基本也是最重
  • Spring JPA @CreatedDate和@LastModifiedDate

    Spring Data JPA提供了注解 CreatedDate和 LastModifiedDate 用来保存创建时间和修改时间 大大降低了开发成本 一 使用步骤 1 启动类需要添加注解 EnableJpaAuditing SpringBo
  • Linux-编写一个自己的命令

    前言 1 在Linux中 我们对文件路径进行操作都需要输入命令 那么 有人可能就会有疑惑了 命令是什么东西 我们是否也可以创造出自己的命令呢 答案是可以的 命令本身其实就是可执行文件 但是 与普通的可执行文件的不同之处在于 命令的可执行文件
  • unity 内置图标

    lt 转 Unity内建图标列表 weixin 30878361 2018 11 14 12 32 00 211 收藏 文章标签 游戏 移动开发 ui 最后发布 2018 11
  • 一款好用的富文本编辑器

    目录 项目功能介绍 资源介绍 swagger接口文档 编辑器功能展示 项目目录讲解 前端 后端 部分代码展示 前端 富文本编辑器页面App vue 后端 文章查询保存 serviceImpl 功能演示 源码分享 给大家分享一个好用的富文本编
  • apt-get update和 upgrade的区别

    update update is used to resynchronize the package index files from their sources The indexes of available packages are
  • 【腾讯云 Cloud Studio 实战训练营】提升开发效率与协作:探索腾讯云 Cloud Studio 的强大功能与优势

    文章目录 一 前言 二 认识腾讯云 Cloud Studio 2 1 什么是云端开发环境 2 2 CDE 的特点与优点 2 2 1 提高效率 开发环境一键运行 2 2 2 提高生产力 可以并行的工作 2 2 3 开发更加规范 2 2 4 提
  • vscode设置sdk_1 visual studio code 配置C++开发环境 (windows 开发环境)

    0 引言 最近帮GF 不幸变成ex了 配置C 开发环境 一开始想给她装个visual studio13完事 但是一想到自己安装以及使用时的诸多麻烦 就有点退却 觉得没有这个必要 正好了解到vscode大行其道 决定按照官网指示配置一版 由于
  • 【STM32】中断与NVIC以外部中断为例

    前言 在stm32中姑且可以认为 异常就是中断 单片机上电之后 首先执行启动文件 开辟堆栈之后 开始初始化中断向量表 NVIC NVIC NVIC是嵌套向量中断控制器 控制着整个芯片中断相关的功能 它跟内核紧密耦合 是内核里面的一个外设 三
  • 专家PID控制matlab程序

    专家PID控制matlab程序 1 专家PID控制 专家PID控制的实质是 基于受控对象和控制规律的各种知识 无须知道被控对象的精确模型 利用专家经验来设计PID参数 专家PID控制是一种直接型专家控制器 典型的二阶系统单位阶跃响应误差曲线
  • 【Linux】这篇文章让你彻底搞懂什么是环境变量

    深入理解环境变量 一 什么是环境变量 二 常见的环境变量 2 1 PATH 2 2 HOME 2 3 SHELL 三 查看与设置变量 四 如何理解命令行带参 五 如何通过代码如何获取环境变量 一 什么是环境变量 总述 环境变量 enviro
  • Win10安装Linux虚拟机-安装与使用

    Win10安装Linux虚拟机 安装与使用 1 VMware 的下载 VMWare虚拟机软件是一个 虚拟PC 软件 它使你可以在一台机器上同时运行二个或更多Windows DOS LINUX系统 下载地址 https customercon
  • ie浏览器打不开闪退_教你修复win7IE浏览器闪退的问题

    使用win7系统的朋友不少会使用IE浏览器来访问网页的时候 经常会出现IE浏览器自动退出了 另外在闪退前会有个提示 出现一个问题导致程序停止正常工作 那么这样的问题该怎样解决呢 下面就跟小编来了解一下怎样修复IE浏览器问题吧 Win7 IE
  • Flex3.2 Lists & Grids 内存泄漏

    所有继承于ListBase的类List DataGrid AdvancedDataGrid and TileList 在选中列表中的一项后 增加了鼠标相关Listener 导致泄漏 SDK3 3中已经修改 Sdk3 2中修复补丁http w
  • 使用plsql访问远程数据库

    1 plsql输入ip端口数据库实例名直接登录 Username 用户名 如 scott Password 用户对应密码 如 tiger Database 数据库位置 语法为 ip 端口号 数据库实例名 如 192 168 1 156 15
  • Nand Flash的同步、异步、ONFI、Toggle

    1 SDR和DDR SDR Single Data Rate 写读数据使用上升沿或下降沿来触发 因为只用上升沿或下降沿 对信号准确性要求较低 DDR Double Data Rate 写数据时通过MCU来控制DQS信号跳变沿来触发 即上升沿

随机推荐

  • android fragment 重复创建的问题

    解决fragment重复创建目前用到有两个方法 1 fragment同viewpager一起使用 vp setOffscreenPageLimit 3 设置缓存页面的个数 2 fragment单独使用 在onCreateView 方法中加入
  • 用C语言写UTF-8编码的文件

    原文地址 http blog csdn net zaffix article details 7217701 为实现用C语言写UTF 8编码的文件 测试了以下两种情况 第一种情况 为 fopen 指定一个编码 然后写入 wchar t 字符
  • Flink笔记14:Flink之window起始点的确定与watermark使用详解

    1 window起始时间的确定 在TimeWindow java中有如下方法来确定window的起始时间 public static long getWindowStartWithOffset long timestamp long off
  • win32 API函数大全

    1 API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelC
  • Python网络爬虫之数美滑块的加密及轨迹之动态js参数分析

    前言 数美滑块的加密及轨迹等应该是入门级别的吧 用他们的教程和话来说 就一个des 然后识别缺口位置可以用cv2或者ddddoc 轨迹 也可以随便模拟一个 这些简单的教程 在csdn已经有一大把可以搜到的 但是却很少人告诉你 它的js好像是
  • CMake 命令

    1 Usage cmake options
  • MAC安装渗透测试靶机

    1 mac 安装docker 直接到docker官网下载docker dmg 下载前先要注册docker 下载后直接安装就可以了 docker version 就能看见安装的版本 我的版本17 03 1 ce 2 下载docker镜像ima
  • 了解l电源纹波PSRR----转摘

    PSRR 就是 Power Supply Rejection Ratio 的缩写 中文含意为 电源纹波抑制比 也就是说 PSRR 表示把输入与电源视为两个独立的信号源时 所得到的两个电压增益的比值 基本计算公式为 PSRR 20log Ri
  • 【C语言】-- 整型数据的存储

    目录 1 数据类型的分类 2 基本类型 2 1 基本类型大小 2 2 整型家族 2 3 数据的存储形式 2 4 整形数据的存储方式 1 数据类型的分类 在C语言中有如下类型 2 基本类型 2 1 基本类型大小 一个变量的创建是要在内存中开辟
  • node の SQLite

    node操作SQLite 之前在做electron桌面制作番茄钟应用时曾经想过用数据库存储数据 一开始打算mongodb 但是发现不能实现无服务器 那么只能使用SQLite了 介绍 SQLite 是一个软件库 实现了自给自足的 无服务器的
  • android 前端常用布局文件升级总结(一)

    问题一 android support design widget CoordinatorLayout 报红 不显示页面 解决方法 把xml布局文件里面的 android support design widget CoordinatorL
  • SpringBoot + Prometheus + Grafana 打造可视化监控

    SpringBoot Prometheus Grafana 打造可视化监控 文章目录 SpringBoot Prometheus Grafana 打造可视化监控 常见的监控组件搭配 安装Prometheus 安装Grafana 搭建Spri
  • [正能量系列]失业的程序员(一)

    注 本文原型为作者的好友 全文不完全代表作者本人的意图 不小心 我失业了 原因是前几天和我的部门经理拍了桌子 我的组员去内蒙古出差 项目没有中标 年后 长得很像猪刚烈的部门经理发飙了 要辞退我的组员 我纳闷了 我的组员是技术支持 要退也应该
  • Proxmox VE虚拟化从入门到应用实战-服务器管理篇(网络配置2

    Proxmox VE虚拟化从入门到应用实战 服务器管理篇 网络配置2 一 Linux多网口绑定 多网口绑定 也称为网卡组或链路聚合 是一种将多个网卡绑定单个网络设备的技术 利用该技术可以实现某个或多个目标 例如提高网络链容错能力 增加网络通
  • 哈希算法总结

    目录 1 Hash是什么 它的作用 2 Hash算法有什么特点 2 1 Hash在管理数据结构中的应用 2 1 Hash在在密码学中的应用 3 Hash算法是如何实现的 4 Hash有哪些流行的算法 5 那么 何谓Hash算法的 碰撞 5
  • Markdown文件关机没保存,怎么恢复

    1 2 点开找到你想恢复的时间段的文件
  • JS date格式化

    Date prototype Format function fmt author meizz use strict jshint var o M this getMonth 1 月份 d this getDate 日 h this get
  • Qt Creator中,include路径包含过程(或如何找到对应的头文件)

    Qt Creator中 include路径包含过程 或如何找到对应的头文件 利用Qt Creator开发程序时 需要包含利用 include来添加头文件 大家都知道 include lt gt 用于包含标准库头文件 路径在安装软件的incl
  • centos7环境下mysql8的tar包的安装及配置

    内网环境下安装及配置 并将数据保存指向某个文件夹 因为博主这里的数据文件夹是有硬盘挂靠的 centos 7 aliyun CentOS 7 x86 64 DVD 1810 mysql mysql 8 0 17 linux glibc2 12
  • 【题解】闯关游戏

    题目描述 艾伦正在闯关 游戏有N个关卡 按照必须完成的顺序编号为1到N 每个关卡可以用两个参数来描述 prob i 和value i 这些参数的含义如下 每当艾伦尝试闯第i关时 他要么顺利通过 要么 挂掉 他完成该关卡的概率总是prob i