当前位置: 首页 > article >正文

题解:洛谷 P1850 [NOIP 2016 提高组] 换教室

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷P1850 [NOIP 2016 提高组] 换教室 - 洛谷【题目描述】对于刚上大学的牛牛来说他面临的第一个问题是如何根据实际情况申请合适的课程。在可以选择的课程中有2 n 2n2n节课程安排在n nn个时间段上。在第i ii1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n个时间段上两节内容相同的课程同时在不同的地点进行其中牛牛预先被安排在教室c i c_ici​上课而另一节课程在教室d i d_idi​进行。在不提交任何申请的情况下学生们需要按时间段的顺序依次完成所有的n nn节安排好的课程。如果学生想更换第i ii节课程的教室则需要提出申请。若申请通过学生就可以在第i ii个时间段去教室d i d_idi​上课否则仍然在教室c i c_ici​上课。由于更换教室的需求太多申请不一定能获得通过。通过计算牛牛发现申请更换第i ii节课程的教室时申请被通过的概率是一个已知的实数k i k_iki​并且对于不同课程的申请被通过的概率是互相独立的。学校规定所有的申请只能在学期开始前一次性提交并且每个人只能选择至多m mm节课程进行申请。这意味着牛牛必须一次性决定是否申请更换每节课的教室而不能根据某些课程的申请结果来决定其他课程是否申请牛牛可以申请自己最希望更换教室的m mm门课程也可以不用完这m mm个申请的机会甚至可以一门课程都不申请。因为不同的课程可能会被安排在不同的教室进行所以牛牛需要利用课间时间从一间教室赶到另一间教室。牛牛所在的大学有v vv个教室有e ee条道路。每条道路连接两间教室并且是可以双向通行的。由于道路的长度和拥堵程度不同通过不同的道路耗费的体力可能会有所不同。 当第i ii1 ≤ i ≤ n − 1 1 \leq i \leq n-11≤i≤n−1节课结束后牛牛就会从这节课的教室出发选择一条耗费体力最少的路径前往下一节课的教室。现在牛牛想知道申请哪几门课程可以使他因在教室间移动耗费的体力值的总和的期望值最小请你帮他求出这个最小值。【输入】第一行四个整数n , m , v , e n,m,v,en,m,v,e。n nn表示这个学期内的时间段的数量m mm表示牛牛最多可以申请更换多少节课程的教室v vv表示牛牛学校里教室的数量e ee表示牛牛的学校里道路的数量。第二行n nn个正整数第i ii1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n个正整数表示c i c_ici​即第i ii个时间段牛牛被安排上课的教室保证1 ≤ c i ≤ v 1 \le c_i \le v1≤ci​≤v。第三行n nn个正整数第i ii1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n个正整数表示d i d_idi​即第i ii个时间段另一间上同样课程的教室保证1 ≤ d i ≤ v 1 \le d_i \le v1≤di​≤v。第四行n nn个实数第i ii1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n个实数表示k i k_iki​即牛牛申请在第i ii个时间段更换教室获得通过的概率。保证0 ≤ k i ≤ 1 0 \le k_i \le 10≤ki​≤1。接下来e ee行每行三个正整数a j , b j , w j a_j, b_j, w_jaj​,bj​,wj​表示有一条双向道路连接教室a j , b j a_j, b_jaj​,bj​通过这条道路需要耗费的体力值是w j w_jwj​保证1 ≤ a j , b j ≤ v 1 \le a_j, b_j \le v1≤aj​,bj​≤v1 ≤ w j ≤ 100 1 \le w_j \le 1001≤wj​≤100。保证1 ≤ n ≤ 2000 1 \leq n \leq 20001≤n≤20000 ≤ m ≤ 2000 0 \leq m \leq 20000≤m≤20001 ≤ v ≤ 300 1 \leq v \leq 3001≤v≤3000 ≤ e ≤ 90000 0 \leq e \leq 900000≤e≤90000。保证通过学校里的道路从任何一间教室出发都能到达其他所有的教室。保证输入的实数最多包含3 33位小数。【输出】输出一行包含一个实数四舍五入精确到小数点后恰好2 22位表示答案。你的输出必须和标准输出完全一样才算正确。测试数据保证四舍五入后的答案和准确答案的差的绝对值不大于4 × 10 − 3 4 \times 10^{-3}4×10−3。如果你不知道什么是浮点误差这段话可以理解为对于大多数的算法你可以正常地使用浮点数类型而不用对它进行特殊的处理【输入样例】3 2 3 3 2 1 2 1 2 1 0.8 0.2 0.5 1 2 5 1 3 3 2 3 1【输出样例】2.80【算法标签】#提高# #期望DP#【代码详解】#includebits/stdc.husingnamespacestd;constintN2005;// 最大天数constintM305;// 最大可申请换教室次数constintINF1e9;// 表示无穷大的值intn,m,v,e;// n: 天数, m: 可申请次数, v: 教室数量, e: 路径数量intc[N];// 第i天原本应该去的教室intd[N];// 第i天可以申请的教室doublek[N];// 第i天申请成功的概率intdist[M][M];// 教室之间的最短距离doubledp[N][N][2];// 动态规划数组intmain(){// 输入基本数据cinnmve;// 初始化距离矩阵为无穷大memset(dist,0x3f,sizeof(dist));// 输入第i天原本应该去的教室for(inti1;in;i){cinc[i];}// 输入第i天可以申请的教室for(inti1;in;i){cind[i];}// 输入第i天申请成功的概率for(inti1;in;i){cink[i];}// 初始化距离矩阵自己到自己的距离为0for(inti1;i300;i){dist[i][i]0;}// 输入路径信息for(inti1;ie;i){inta,b,w;cinabw;dist[a][b]dist[b][a]min(dist[a][b],w);}// Floyd算法计算所有教室之间的最短距离for(intk1;kv;k){for(inti1;iv;i){for(intj1;jv;j){if(dist[i][k]dist[k][j]dist[i][j]){dist[i][j]dist[i][k]dist[k][j];}}}}// 初始化动态规划数组为无穷大for(inti1;in;i){for(intj0;jm;j){dp[i][j][0]dp[i][j][1]INF;}}// 初始化第一天的情况dp[1][0][0]0;// 第一天不申请dp[1][1][1]0;// 第一天申请// 动态规划for(inti2;in;i)// 从第二天开始{// 计算第i天不申请的情况for(intj0;jm;j)// 枚举申请次数{// 情况1: 第i-1天不申请第i天不申请dp[i][j][0]min(dp[i][j][0],dp[i-1][j][0]dist[c[i-1]][c[i]]);// 情况2: 第i-1天申请第i天不申请if(dp[i-1][j][1]INF){dp[i][j][0]min(dp[i][j][0],dp[i-1][j][1]k[i-1]*dist[d[i-1]][c[i]](1-k[i-1])*dist[c[i-1]][c[i]]);}}// 计算第i天申请的情况for(intj1;jm;j)// 枚举申请次数至少需要一次申请{// 情况3: 第i-1天不申请第i天申请if(dp[i-1][j-1][0]INF){dp[i][j][1]min(dp[i][j][1],dp[i-1][j-1][0]k[i]*dist[c[i-1]][d[i]](1-k[i])*dist[c[i-1]][c[i]]);}// 情况4: 第i-1天申请第i天申请if(dp[i-1][j-1][1]INF){doublevaldp[i-1][j-1][1];valk[i-1]*k[i]*dist[d[i-1]][d[i]];valk[i-1]*(1-k[i])*dist[d[i-1]][c[i]];val(1-k[i-1])*k[i]*dist[c[i-1]][d[i]];val(1-k[i-1])*(1-k[i])*dist[c[i-1]][c[i]];dp[i][j][1]min(dp[i][j][1],val);}}}// 找到最小期望距离doubleansINF;for(intj0;jm;j){ansmin(ans,dp[n][j][0]);// 最后一天不申请ansmin(ans,dp[n][j][1]);// 最后一天申请}// 输出结果保留2位小数printf(%.2lf\n,ans);return0;// 程序正常结束}【运行结果】3 2 3 3 2 1 2 1 2 1 0.8 0.2 0.5 1 2 5 1 3 3 2 3 1 2.80

相关文章:

题解:洛谷 P1850 [NOIP 2016 提高组] 换教室

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…...

手把手拆解FusionAD:从BEV特征融合到轨迹优化,一个端到端自动驾驶模型的实战解析

手把手拆解FusionAD:从BEV特征融合到轨迹优化,一个端到端自动驾驶模型的实战解析 自动驾驶技术正在经历从模块化到端到端的范式转变,而FusionAD作为这一领域的代表性工作,通过多模态BEV特征融合和时间序列建模,实现了感…...

面试官:父子线程之间如何共享、传递数据?

面试考察点 ThreadLocal 机制理解:面试官不仅仅是想知道你会不会用 ThreadLocal,更是想知道你是否清楚 ThreadLocal 的数据隔离特性——它只对当前线程可见,子线程天然拿不到父线程的数据。方案演进认知:考察你是否了解从 Thread…...

023、使用向量数据库增强Agent的记忆与检索能力

023、使用向量数据库增强Agent的记忆与检索能力 当你的Agent面对海量、非结构化的历史对话和文档时,如何让它像人类一样“瞬间想起”相关上下文,而不是遗忘或低效地线性搜索?向量数据库正是解决这一核心痛点的关键技术。 前言 在上一篇文章《Agent与数据库交互:实现数据的…...

如何用Open Images数据集快速构建你的第一个计算机视觉模型:完整免费教程

如何用Open Images数据集快速构建你的第一个计算机视觉模型:完整免费教程 【免费下载链接】dataset The Open Images dataset 项目地址: https://gitcode.com/gh_mirrors/dat/dataset 还在为寻找高质量标注数据而发愁吗?Open Images数据集就是你的…...

022、Agent与数据库交互:实现数据的查询与更新

022、Agent与数据库交互:实现数据的查询与更新 当你的Agent需要记住用户偏好、查询历史订单或管理知识库时,它必须学会与数据库“对话”。本文将手把手教你为Agent装上数据持久化的“手脚”,让它从“健忘的聊天机器人”蜕变为“可靠的数字助理”。 前言 在之前的文章中,我…...

告别繁琐操作:ARK: Survival Evolved 玩家的终极启动器指南

告别繁琐操作:ARK: Survival Evolved 玩家的终极启动器指南 【免费下载链接】TEKLauncher Launcher for ARK: Survival Evolved 项目地址: https://gitcode.com/gh_mirrors/te/TEKLauncher 你是否厌倦了每次启动 ARK: Survival Evolved 时都要面对繁琐的模组…...

点云配准效率翻倍:深入浅出图解Fast Global Registration的‘四元约束’到底在干嘛

点云配准效率翻倍:深入浅出图解Fast Global Registration的‘四元约束’到底在干嘛 想象一下你面前有两张由不同角度拍摄的乐高城堡照片,现在需要将它们完美拼接成一幅完整图像。传统方法需要逐块尝试拼合,而Fast Global Registration&#x…...

顺丰突然重仓2亿美元:机器人开始“取代”分拣工了?

2026年4月27日,星动纪元宣布完成超2亿美元新一轮融资。2026年4月27日,具身智能赛道在同一日内落下两枚重磅炸弹。星动纪元宣布完成超2亿美元新一轮融资,无界动力同步官宣天使轮累计融资超2亿美元。最引人注目的是,星动纪元的融资消…...

3个维度重构你的Windows体验:Win11Debloat系统深度优化解码

3个维度重构你的Windows体验:Win11Debloat系统深度优化解码 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...

最新 MiniMax Token Plan 邀请码 Minimax邀请码 (截止到2026-06-30)

🚀 MiniMax Token Plan 惊喜上线!新增语音、音乐、视频和图片生成权益。邀请好友享双重好礼,助力开发体验!(截止到2026-06-30) 好友立享 9折 专属优惠 Builder 权益,你赢返利 社区特权&#x…...

5大核心模块深度解析:Blazor框架的完整架构与开发实践

5大核心模块深度解析:Blazor框架的完整架构与开发实践 【免费下载链接】blazor Blazor moved to https://github.com/dotnet/aspnetcore 项目地址: https://gitcode.com/gh_mirrors/bl/blazor Blazor是微软推出的革命性Web框架,允许开发者使用C#构…...

高压电流检测电路设计与精度优化实践

1. 高压电流检测的挑战与解决方案在电力电子系统设计中,精准监测负载电流是确保设备安全运行的关键。传统电流检测放大器(CSA)虽然能提供微伏级精度,但其输入共模电压范围通常局限在几十伏以内,这直接制约了在工业控制、服务器背板等高压场景…...

LiveAutoRecord技术深度解析:如何实现跨平台直播自动录制的模块化架构

LiveAutoRecord技术深度解析:如何实现跨平台直播自动录制的模块化架构 【免费下载链接】LiveAutoRecord 基于 Electron 的多平台直播自动录制软件 项目地址: https://gitcode.com/GitHub_Trending/li/LiveAutoRecord 在直播内容生态日益繁荣的今天&#xff0…...

ComfyUI-Easy-Use提示词选择器性能优化终极指南

ComfyUI-Easy-Use提示词选择器性能优化终极指南 【免费下载链接】ComfyUI-Easy-Use In order to make it easier to use the ComfyUI, I have made some optimizations and integrations to some commonly used nodes. 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-…...

MZmine3数据处理工具终极指南:构建高效工作流的5个关键步骤

MZmine3数据处理工具终极指南:构建高效工作流的5个关键步骤 【免费下载链接】mzmine3 mzmine source code repository 项目地址: https://gitcode.com/gh_mirrors/mz/mzmine3 MZmine3作为一款强大的质谱数据处理工具,为科研人员提供了从原始数据导…...

手机里的‘保险柜’:聊聊UFS RPMB如何保护你的指纹和支付密钥

手机里的‘保险柜’:UFS RPMB如何守护你的生物密钥与支付安全 当你在手机上用指纹解锁屏幕或完成一笔支付时,一组由256位加密算法保护的密钥正在闪存芯片的某个特殊区域悄然运作。这个被称为RPMB(Replay Protected Memory Block)的…...

AAOS 14多屏模拟器深度解析:从Car Framework更新到多用户、多区域音频配置

AAOS 14多屏架构设计与实现:从Car Framework到多区域音频的完整技术解析 当现代智能座舱开始标配五块以上显示屏时,工程师们面临的核心挑战已从"如何点亮屏幕"转变为"如何优雅管理多屏生态"。AAOS 14的Display and Window Manager更…...

《道德经》全域数理公理释义基于乖乖数学·全域数学本源公理体系

《道德经》全域数理公理释义基于乖乖数学全域数学本源公理体系《道德经》全域数理公理释义总结 核心概述:本文以“乖乖数学全域数学本源公理体系”为原创框架,对《道德经》进行全新的数理化解读与重构,试图将其提升为基于数学和物理学公理的宇…...

从防火墙到零信任:用Zscaler ZTX改造企业安全架构的避坑指南

从防火墙到零信任:用Zscaler ZTX改造企业安全架构的避坑指南 当企业数字化转型进入深水区,传统防火墙构筑的"护城河"安全模型正面临前所未有的挑战。一位金融科技公司的CSO曾向我展示过他们的网络拓扑图:23台下一代防火墙、7套VPN集…...

3步通关编程学习:用游戏化方式让代码变得有趣又简单

3步通关编程学习:用游戏化方式让代码变得有趣又简单 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 还在为枯燥的编程语法和抽象概念烦恼吗?CodeCombat 提供了一个革命性的…...

OpCore Simplify:告别繁琐配置,5分钟打造完美黑苹果EFI

OpCore Simplify:告别繁琐配置,5分钟打造完美黑苹果EFI 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为OpenCore配置的复…...

用TensorFlow和PyTorch分别实现视频动作识别:手把手教你搭建3D卷积网络(附完整代码)

用TensorFlow和PyTorch分别实现视频动作识别:手把手教你搭建3D卷积网络(附完整代码) 视频动作识别是计算机视觉领域的重要应用场景,从健身动作纠正到安防监控中的异常行为检测,这项技术正在改变我们与视频内容交互的方…...

Blazor完整指南:3个核心模块带你掌握.NET WebAssembly开发

Blazor完整指南:3个核心模块带你掌握.NET WebAssembly开发 【免费下载链接】blazor Blazor moved to https://github.com/dotnet/aspnetcore 项目地址: https://gitcode.com/gh_mirrors/bl/blazor 想要用C#开发Web应用却不想写JavaScript?Blazor正…...

前端架构演进历程

前端架构演进历程:从简单到复杂的蜕变 前端技术的发展如同一部精彩的进化史,从最初的静态页面到如今的复杂应用,架构的每一次变革都推动了用户体验和开发效率的飞跃。随着互联网的普及和技术的迭代,前端架构经历了多次重大转型&a…...

从零到上线:用Visual Studio 2022和IIS Manager完整部署.NET 8.0 MVC应用

从零到上线:用Visual Studio 2022和IIS Manager完整部署.NET 8.0 MVC应用 对于刚接触.NET开发的初学者来说,将第一个MVC应用成功部署到生产环境可能是个令人望而生畏的任务。本文将带你走过从项目创建到最终发布的完整旅程,特别针对.NET 8.0和…...

Dism++完全指南:Windows系统维护与优化的终极解决方案

Dism完全指南:Windows系统维护与优化的终极解决方案 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你是否曾为Windows系统运行缓慢、磁盘空间不足或…...

FoxAI浏览器扩展开发全解析:AI助手集成与定制指南

1. 项目概述与核心价值 最近在折腾浏览器扩展开发,发现一个挺有意思的开源项目叫 FoxAI.me,它本质上是一个基于 AI 的浏览器助手扩展。简单来说,就是你在浏览网页时,选中任何文本,都能快速调用 Gemini 或 ChatGPT 这类…...

ESP32物联网应用服务器框架:模块化设计与环境监测站实战

1. 项目概述与核心价值 最近在捣鼓智能家居和物联网项目,发现一个挺有意思的开源项目,叫 xinnan-tech/xiaozhi-esp32-server 。乍一看名字,你可能觉得这又是一个基于ESP32的Web服务器或者MQTT客户端,但实际深入进去,…...

Radxa ROCK 5B无风扇金属机箱散热改造指南

1. Radxa ROCK 5B无风扇金属机箱改造全解析 作为一名长期折腾单板计算机的硬件爱好者,我最近入手了Radxa ROCK 5B的无风扇金属机箱。这款机箱完美解决了原装散热方案的噪音问题,让这块性能强劲的RK3588开发板更适合作为静音家庭服务器或媒体中心使用。下…...