《P1850 [NOIP 2016 提高组] 换教室》

题目背景

NOIP2016 提高组 D1T3

题目描述

对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。

在可以选择的课程中,有 2n 节课程安排在 n 个时间段上。在第 i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 ci​ 上课,而另一节课程在教室 di​ 进行。

在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的 n 节安排好的课程。如果学生想更换第 i 节课程的教室,则需要提出申请。若申请通过,学生就可以在第 i 个时间段去教室 di​ 上课,否则仍然在教室 ci​ 上课。

由于更换教室的需求太多,申请不一定能获得通过。通过计算,牛牛发现申请更换第 i 节课程的教室时,申请被通过的概率是一个已知的实数 ki​,并且对于不同课程的申请,被通过的概率是互相独立的。

学校规定,所有的申请只能在学期开始前一次性提交,并且每个人只能选择至多 m 节课程进行申请。这意味着牛牛必须一次性决定是否申请更换每节课的教室,而不能根据某些课程的申请结果来决定其他课程是否申请;牛牛可以申请自己最希望更换教室的 m 门课程,也可以不用完这 m 个申请的机会,甚至可以一门课程都不申请。

因为不同的课程可能会被安排在不同的教室进行,所以牛牛需要利用课间时间从一间教室赶到另一间教室。

牛牛所在的大学有 v 个教室,有 e 条道路。每条道路连接两间教室,并且是可以双向通行的。由于道路的长度和拥堵程度不同,通过不同的道路耗费的体力可能会有所不同。 当第 i(1≤i≤n−1)节课结束后,牛牛就会从这节课的教室出发,选择一条耗费体力最少的路径前往下一节课的教室。

现在牛牛想知道,申请哪几门课程可以使他因在教室间移动耗费的体力值的总和的期望值最小,请你帮他求出这个最小值。

输入格式

第一行四个整数 n,m,v,e。n 表示这个学期内的时间段的数量;m 表示牛牛最多可以申请更换多少节课程的教室;v 表示牛牛学校里教室的数量;e 表示牛牛的学校里道路的数量。

第二行 n 个正整数,第 i(1≤i≤n)个正整数表示 ci​,即第 i 个时间段牛牛被安排上课的教室;保证 1≤ci​≤v。

第三行 n 个正整数,第 i(1≤i≤n)个正整数表示 di​,即第 i 个时间段另一间上同样课程的教室;保证 1≤di​≤v。

第四行 n 个实数,第 i(1≤i≤n)个实数表示 ki​,即牛牛申请在第 i 个时间段更换教室获得通过的概率。保证 0≤ki​≤1。

接下来 e 行,每行三个正整数 aj​,bj​,wj​,表示有一条双向道路连接教室 aj​,bj​,通过这条道路需要耗费的体力值是 wj​;保证 1≤aj​,bj​≤v,1≤wj​≤100。

保证 1≤n≤2000,0≤m≤2000,1≤v≤300,0≤e≤90000。

保证通过学校里的道路,从任何一间教室出发,都能到达其他所有的教室。

保证输入的实数最多包含 3 位小数。

输出格式

输出一行,包含一个实数,四舍五入精确到小数点后恰好 2 位,表示答案。你的输出必须和标准输出完全一样才算正确。

测试数据保证四舍五入后的答案和准确答案的差的绝对值不大于 4×10−3。(如果你不知道什么是浮点误差,这段话可以理解为:对于大多数的算法,你可以正常地使用浮点数类型而不用对它进行特殊的处理)

输入输出样例

输入 #1复制

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

输出 #1复制

2.80

说明/提示

样例 1 说明

所有可行的申请方案和期望收益如下:

  • 不作申请,耗费的体力值的期望为 8.0。
申请通过的时间段出现的概率耗费的体力值
1.08
  • 申请更换第 1 个时间段的上课教室,耗费的体力值的期望为 4.8。
申请通过的时间段出现的概率耗费的体力值
10.84
0.28
  • 申请更换第 2 个时间段的上课教室,耗费的体力值的期望为 6.4。
申请通过的时间段出现的概率耗费的体力值
20.20
0.88
  • 申请更换第 3 个时间段的上课教室,耗费的体力值的期望为 6.0。
申请通过的时间段出现的概率耗费的体力值
30.54
0.58
  • 申请更换第 1,2 个时间段的上课教室,耗费的体力值的期望为 4.48。
申请通过的时间段出现的概率耗费的体力值
1,20.164
10.644
20.040
0.168
  • 申请更换第 1,3 个时间段的上课教室,耗费的体力值的期望为 2.8。
申请通过的时间段出现的概率耗费的体力值
1,30.40
10.44
30.14
0.18
  • 申请更换第 2,3 个时间段的上课教室,耗费的体力值的期望为 5.2。
申请通过的时间段出现的概率耗费的体力值
2,30.14
20.10
30.44
0.48

因此,最优方案为:申请更换第 1,3 个时间段的上课教室。耗费的体力值的期望为 2.8。

提示

  1. 道路中可能会有多条双向道路连接相同的两间教室。 也有可能有道路两端连接的是同一间教室。
  2. 请注意区分 n,m,v,e 的意义, n 不是教室的数量, m 不是道路的数量。

数据范围与说明

测试点编号n≤m≤v≤是否具有特殊性质 1是否具有特殊性质 2
111300××
22020××
321100××
422300××
53020
631100×
732300××
8100300
910120×
10102100××
111010300×
1220020×
13201100××
14202300×
152020300×
16300020××
173001100××
183002300
19300300300×
202000020××
212000120××
2220002100××
2320002000100××
2420002000300××
2520002000300××

特殊性质 1:图上任意不同的两点 u,v 间,存在一条耗费体力最少的路径只包含一条道路。

特殊性质 2:对于所有的 1≤i≤n, ki​=1。

代码实现:

#include<cstdio> #include<algorithm> using namespace std; double p[2005], dis[305][305]; double dp[2005][2005][2]; int u[2005], v[2005]; int main() { int n, m, cnt, e; scanf("%d%d%d%d",&n,&m,&cnt,&e); for(int i=1;i<=n;i++) { scanf("%d",&u[i]); } for(int i=1;i<=n;i++) { scanf("%d",&v[i]); } for(int i=1;i<=n;i++) { scanf("%lf",&p[i]); } for(int i=1;i<=301;i++) { for(int j=1;j<=301;j++) { dis[i][j]=1000000000; } } for(int i=1;i<=300;i++) dis[i][i]=0; for(int i=1;i<=e;i++) { int x,y; double z; scanf("%d%d%lf",&x,&y,&z); dis[x][y]=dis[y][x]=min(dis[x][y],z); } for(int kk=1;kk<=cnt;kk++) { for(int i=1;i<=cnt;i++) { for(int j=1;j<=cnt;j++) { dis[i][j]=min(dis[i][j],dis[i][kk]+dis[kk][j]); } } } for(int i=1;i<=n;i++) { for(int j=0;j<=m;j++) { dp[i][j][0]=dp[i][j][1]=1000000000; } } dp[1][0][0]=dp[1][1][1]=0; for(int i=2;i<=n;i++) { for(int j=0;j<=min(i,m);j++) { dp[i][j][0]=min(dp[i][j][0],dp[i-1][j][0]+dis[u[i-1]][u[i]]); dp[i][j][0]=min(dp[i][j][0],dp[i-1][j][1]+(1-p[i-1])*dis[u[i-1]][u[i]]+p[i-1]*dis[v[i-1]][u[i]]); if(j) { dp[i][j][1]=min(dp[i][j][1],dp[i-1][j-1][0]+p[i]*dis[u[i-1]][v[i]]+(1-p[i])*dis[u[i-1]][u[i]]); dp[i][j][1]=min(dp[i][j][1],dp[i-1][j-1][1]+p[i-1]*p[i]*dis[v[i-1]][v[i]]+p[i-1]*(1-p[i])*dis[v[i-1]][u[i]]+(1-p[i-1])*p[i]*dis[u[i-1]][v[i]]+(1-p[i-1])*(1-p[i])*dis[u[i-1]][u[i]]); } } } double res=1000000000; for(int i=0;i<=m;i++) { res=min(res,dp[n][i][1]); res=min(res,dp[n][i][0]); } printf("%.2lf\n",res); return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1173493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python视觉实战】文字压住产品纹理怎么办?揭秘 AI 如何在“网眼/毛绒”材质上实现无痕去字

Python AIGC 图像修复 Inpainting 计算机视觉 跨境电商摘要在跨境电商的素材处理中&#xff0c;最令美工崩溃的场景莫过于**“文字与产品纹理重叠”。当中文卖点直接印在运动鞋的透气网面、羽绒服的复杂的缝线、或是实木家具的纹理上时&#xff0c;传统的仿制图章工具几乎无法还…

汽车制造行业CMS如何集成UEDITOR实现WORD公式自动上传?

一个C#程序员的UEditorWord导入奇幻漂流&#xff1a;从.NET到Vue的魔幻联动 第一章&#xff1a;需求降临——老板的"简单"需求 "小王啊&#xff0c;咱们后台编辑器得加个Word导入功能&#xff0c;要保留格式和图片啊&#xff01;“老板轻描淡写的一句话&#…

【图像加密解密】基于matlab Arnold置乱变换图像加密解密【含Matlab源码 14960期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【Python视觉】1688长图怎么上亚马逊?揭秘 AI 如何智能“切割”并重构超长详情页

Python 计算机视觉 详情页优化 智能切图 跨境电商摘要在将国内 1688 或淘宝的爆款商品引入跨境平台&#xff08;Amazon, Shopee&#xff09;时&#xff0c;卖家面临的最大格式障碍是 “详情页长图&#xff08;Long Scroll Image&#xff09;”。简单的固定像素切割&#xff08;…

【图像加密解密】Arnold置乱变换图像加密解密【含Matlab源码 14960期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

互联网站群程序如何通过百度UE优化微信公众号内容导入?

一个Java程序员的UEditorWord导入血泪史&#xff1a;从抓狂到真香 第一章&#xff1a;需求降临——老板的"简单"要求 "小张啊&#xff0c;咱们后台编辑器得加个功能&#xff0c;用户要能直接导入Word文档&#xff0c;格式和图片都不能丢啊&#xff01;"老…

【图像加密解密】DNA编码混沌系统图像加密解密(数据丢失攻击测试、直方图分析、熵值计算、PSNR 峰值信噪比、像素相关性分析)【含Matlab源码 14961期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

芯片制造企业如何利用百度富文本编辑器实现PDF跨平台编辑?

今天早上刚到工位&#xff0c;就收到一位网友的微信私聊——原来是某初中学校外包项目的对接人&#xff0c;想咨询Word文档一键导入功能的实现方案。其实我的微信号早在技术社区公开过&#xff0c;但仍有不少开发者表示"大海捞针"&#xff0c;这找技术资源的难度堪比…

【图像加密解密】分数阶傅立叶变换和曲线锯变换图像加密解密【含Matlab源码 14962期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

‌AI自动生成“测试数据血缘图”:重构软件测试中的Bug源头追踪范式

一、AI驱动的测试数据血缘图&#xff0c;正在将Bug定位时间从“天级”压缩至“分钟级”‌传统测试中&#xff0c;定位一个线上缺陷常需人工翻查日志、比对代码、追溯数据库变更&#xff0c;耗时数小时甚至数日。而基于AI的‌自动化测试数据血缘图‌&#xff0c;通过动态构建“数…

西门子S7-200 SMART PLC与MCGS7.7触摸屏控制台达伺服电机位置模式的接线与参...

西门子S7-200SMART型PLC和MCGS7.7触摸屏控制台达伺服电机位置模式,带接线说明参数说明和运行效果视频最近在项目中用到了西门子S7-200 SMART PLC搭配MCGS7.7触摸屏控制台达ASD-A2系列伺服电机&#xff0c;折腾两天终于跑通了位置模式控制。分享下具体实现过程&#xff0c;包含硬…

Node.js用axios并发请求提速

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js Axios并发请求优化&#xff1a;从性能瓶颈到智能提速策略目录Node.js Axios并发请求优化&#xff1a;从性能瓶颈到智能提…

【HarmonyOS NEXT】解决:软键盘弹起导致页面整体上移、标题栏丢失的问题

一、背景 在开发鸿蒙 APP 登录页时&#xff0c;会遇到这样的体验问题&#xff0c;当用户点击输入框弹出软键盘时&#xff0c;整个页面会被默认的上推模式带起&#xff0c;导致顶部的标题栏被推出可视区域&#xff0c;严重影响用户体验。 备注&#xff1a;以下解决方法为&…

我用AI分析测试日志,自动聚类相似失败模式

在当今快速迭代的软件开发环境中&#xff0c;测试日志是质量保障&#xff08;QA&#xff09;的核心资产。它们记录了测试用例的执行结果、错误信息和系统行为&#xff0c;但面对成千上万的日志条目&#xff0c;手动分析变得低效且易出错。尤其当多个失败案例&#xff08;failur…

学长亲荐!自考必备TOP10一键生成论文工具深度测评

学长亲荐&#xff01;自考必备TOP10一键生成论文工具深度测评 自考论文写作工具测评&#xff1a;为何要关注2026年榜单&#xff1f; 对于正在备战自考的学子来说&#xff0c;撰写一篇结构严谨、内容充实的论文是毕业路上的关键一环。然而&#xff0c;面对繁杂的资料收集、格式排…

用AI生成“测试风险热力图”:一眼看出哪里最危险

测试风险热力图的变革性价值 在软件测试领域&#xff0c;风险无处不在——一个未发现的漏洞可能导致系统崩溃、数据泄露或用户流失。传统测试方法依赖人工经验判断风险优先级&#xff0c;但主观性强、效率低下&#xff0c;尤其在复杂系统中易遗漏关键区域。2026年&#xff0c;…

【HarmonyOS NEXT】如何监听软键盘的弹出和收起事件

一、背景在开发鸿蒙 APP 登录页时&#xff0c;当输入框键盘弹起&#xff0c;需要改变logo图标与输入框的间距&#xff0c;让整个页面完全展示&#xff0c;提升用户体验二、具体问题默认情况下&#xff0c;logo图标与标题栏和输入框给的固定间距&#xff0c;页面能够完全展示&am…

深聊安阳同昌新材料,它在行业的口碑排名及靠谱性解读 - 工业品牌热点

本榜单依托有色金属冶炼设备领域全维度市场调研与真实客户口碑,深度筛选出五家标杆企业,为金属回收加工企业选型提供客观依据,助力精准匹配适配的设备及技术服务伙伴。 TOP1 推荐:安阳同昌新材料有限公司 推荐指数…

完整教程:我用 Pygame + DeepSeek 做了一个中文 AI RPG 游戏!

完整教程:我用 Pygame + DeepSeek 做了一个中文 AI RPG 游戏!2026-01-17 12:44 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !impo…

我让AI读了1000个GitHub测试项目,总结出“最佳实践”

‌一、测试工程的四大支柱‌基于对1000 GitHub 测试项目、科技巨头公开文档及行业实践的深度分析&#xff0c;软件测试的最佳实践已形成清晰的四维框架&#xff1a;维度核心实践代表项目/工具关键价值‌测试架构‌测试金字塔&#xff08;80%单元 15%集成 5%E2E&#xff09;Go…