原题链接:https://loj.ac/problem/2360

换教室

题目描述

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

在可以选择的课程中,有2n2n2n节课程安排在nnn个时间段上。在第iii个时间段上(1≤i≤n)(1 \leq i \leq n)(1≤i≤n),两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室cic_ici​上课,而另一节课程在教室did_idi​进行。
在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的nnn节安排好的课程。如果学生想更换第i节课程的教室,则需要提出申请。若申请通过,学生就可以在第iii个时间段去教室did_idi​上课,否则仍然在教室cic_ici​上课。
由于更换教室的需求太多,申请不一定能获得通过。通过计算,牛牛发现申请更换第iii节课程的教室时,申请被通过的概率是一个已知的实数kik_iki​,并且对于不同课程的申请,被通过的概率是互相独立的。
学校规定,所有的申请只能在学期开始前一次性提交,并且每个人只能选择至多mmm节课程进行申请。这意味着牛牛必须一次性决定是否申请更换每节课的教室,而不能根据某些课程的申请结果来决定其他课程是否申请;牛牛可以申请白己最希望更换教室的mmm门课程,也可以不用完这mmm个申请的机会,甚至可以一门课程都不申请。

因为不同的课程可能会被安排在不同的教室进行,所以牛牛需要利用课问时间从一间教室赶到另一间教室。
牛牛所在的大学有vvv个教室,有eee条道路。每条道路连接两间教室,并且是可以双向通行的。由于道路的长度和拥堵程度不同,通过不同的道路耗费的体力可能会有所不同。当第iii(1≤i≤n−11 \leq i \leq n - 11≤i≤n−1)节课结束后,牛牛就会从这节课的教室出发,选择一条耗费体力最少的路径前往下一节课的教室。

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

输入格式

第一行四个整数n,m,v,en, m, v, en,m,v,e 。nnn表示这个学期内的时间段的数量;mmm表示牛牛最多可以申请更换多少节课程的教室;vvv表示牛牛学校里教室的数量;eee表示牛牛的学校里道路的数量。
第二行nnn个正整数,第iii(1≤i≤n1 \leq i \leq n1≤i≤n)个正整数表示cic_ici​,即第iii个时间段牛牛被安排上课的教室;保证1≤ci≤v1 \leq c_i \leq v1≤ci​≤v。
第三行nnn个正整数,第iii(1≤i≤n1 \leq i \leq n1≤i≤n)个正整数表示 did_idi​ ,即第iii个时间段另一间上同样课程的教室;保证1≤di≤v1 \leq d_i \leq v1≤di​≤v。
第四行nnn个实数,第iii(1≤i≤n1 \leq i \leq n1≤i≤n)个实数表示kik_iki​,即牛牛申请在第iii个时间段更换教室获得通过的概率。保证0≤ki≤10 \leq k_i \leq 10≤ki​≤1。
接下来eee行,每行三个正整数aj,bj,wja_j, b_j, w_jaj​,bj​,wj​,表示有一条双向道路连接教室 aj,bja_j, b_jaj​,bj​,通过这条道路需要耗费的体力值是WjW_jWj​;保证1≤aj,bj≤v,1≤wj≤1001 \leq a_j, b_j \leq v, 1 \leq w_j \leq 1001≤aj​,bj​≤v,1≤wj​≤100。
保证1≤n≤20001 \leq n \leq 20001≤n≤2000,0≤m≤20000 \leq m \leq 20000≤m≤2000,1≤v≤3001 \leq v \leq 3001≤v≤300,0≤e≤900000 \leq e \leq 900000≤e≤90000。
保证通过学校里的道路,从任何一间教室出发,都能到达其他所有的教室。
保证输入的实数最多包含333位小数。

输出格式

输出一行,包含一个实数,四舎五入精确到小数点后恰好222位,表示答案。你的输出必须和标准输出完全一样才算正确。
测试数据保证四舎五入后的答案和准确答案的差的绝对值不大于4×10−34 \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

数据范围与提示

1≤n,m≤2000,1≤v≤300,1≤e≤900001 \leq n, m \leq 2000, 1 \leq v \leq 300, 1 \leq e \leq 900001≤n,m≤2000,1≤v≤300,1≤e≤90000。

代码

dp[i][j][1/0]dp[i][j][1/0]dp[i][j][1/0]表示考虑前iii节课,申请换了jjj节课,第i−1i-1i−1节课是/否申请了调换。

然后转移就非常自然了,只是有点小长。。。

对于申请了调换的教室,我们就要考虑调换成功/失败两种情况,加上当前情况的距离乘以出现概率,取minminmin即可。

代码
#include<bits/stdc++.h>
using namespace std;
const int M=2005,N=305;
int c[M],d[M],dis[N][N],n,m,v,e;
double k[M],dp[M][M][2],ans=1e200;
void in()
{memset(dis,63,sizeof(dis));scanf("%d%d%d%d",&n,&m,&v,&e);for(int i=1;i<=n;++i)scanf("%d",&c[i]);for(int i=1;i<=n;++i)scanf("%d",&d[i]);for(int i=1;i<=n;++i)scanf("%lf",&k[i]);for(int i=1,a,b,w;i<=e;++i)scanf("%d%d%d",&a,&b,&w),dis[a][b]=min(dis[a][b],w),dis[b][a]=min(dis[b][a],w);
}
void ac()
{for(int p=1;p<=v;++p)for(int i=1;i<=v;++i)for(int j=1;j<=v;++j)if(dis[i][p]+dis[p][j]<dis[i][j])dis[i][j]=dis[i][p]+dis[p][j];for(int i=1;i<=v;++i)dis[i][0]=dis[0][i]=dis[i][i]=0;memset(dp,127,sizeof(dp));dp[1][0][0]=dp[1][1][1]=0;for(int i=2,j;i<=n;++i)for(dp[i][0][0]=dp[i-1][0][0]+dis[c[i-1]][c[i]],j=1;j<=min(i,m);++j){dp[i][j][0]=min(dp[i][j][0],min(dp[i-1][j][0]+dis[c[i-1]][c[i]],dp[i-1][j][1]+dis[c[i-1]][c[i]]*(1-k[i-1])+dis[d[i-1]][c[i]]*k[i-1]));dp[i][j][1]=min(dp[i][j][1],min(dp[i-1][j-1][0]+dis[c[i-1]][c[i]]*(1-k[i])+dis[c[i-1]][d[i]]*k[i],dp[i-1][j-1][1]+dis[c[i-1]][c[i]]*(1-k[i-1])*(1-k[i])+dis[c[i-1]][d[i]]*(1-k[i-1])*k[i]+dis[d[i-1]][c[i]]*k[i-1]*(1-k[i])+dis[d[i-1]][d[i]]*k[i-1]*k[i]));}for(int i=0;i<=m;++i)ans=min(ans,min(dp[n][i][0],dp[n][i][1]));printf("%.2lf",ans);
}
int main(){in(),ac();}

LOJ2360「NOIP2016」换教室相关推荐

  1. 基于文心一言的底层视觉理解,百度网盘把「猫」换成了「黄色的猫」

    随着移动互联网的一路狂飙,手机已经成为人们的新器官.出门不带钥匙可以,不带手机却是万万不可以的.而手机上,小小的摄像头也越来越成为各位「vlogger」的口袋魔方.每天有超过数亿的照片和视频被上传到百 ...

  2. 【BZOJ4720】【NOIP2016】换教室

    我当年真是naive-- 原题: 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节 ...

  3. 【NOIP2016】换教室

    题目描述 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课 ...

  4. 「NOIP2016」天天爱跑步

    小 C 同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一棵包含 s ...

  5. BZOJ 4720 [Noip2016]换教室

    4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...

  6. P1850 [NOIP2016 提高组] 换教室

    P1850 [NOIP2016 提高组] 换教室 题意: 有2n个课安排在n个时间段上,每个时间段上都有两个一样的课同时在不同地方上,起初牛牛被所有课都被安排在Ci上课,另一节课在Di上课.牛牛现在想 ...

  7. 苹果发布新款iPad Pro!就换了个「芯」,转换器骚操作笑翻网友

    [新智元导读]苹果iPad系列上新了,但也没有完全上新. 昨晚,苹果悄悄地发布了最新的iPad和一系列新配件. 一大早,新款iPad就连上N条热搜. 为啥这么悄咪咪的呢?因为这次,苹果没有抬出什么让人 ...

  8. 不用着急换新电脑了,「Macbooster」让您的旧Mac一样快如闪电~☛完美破解版☜

    每年的三月份,苹果总会推出一系列新品,如果您选择换新的话,那您又得心疼自己的小金库了吧!纵使是强大的Macbook,使用久了都可能出现卡顿,运行缓慢的情况.我想最经济的方法就是通过修改配置或更好的管理 ...

  9. [NOIP2016]换教室(概率期望$DP$)

    其实吧我老早就把这题切了--因为说实话,这道题确实不难啊--李云龙:比他娘的状压DP简单多了 今天我翻以前在Luogu上写的题解时,突然发现放错代码了,然后被一堆人\(hack\)--蓝瘦啊\(ORZ ...

  10. 【NOIp2016 day1t3】换教室

    NOIP第一次考期望,着实吓一跳... 读入之后, 由于 n<=200 n <= 200 n,给我们建立了天然的 floyd f l o y d floyd的机会, 建完图之后,能够顺利的 ...

最新文章

  1. HDU(1847)Good Luck in CET-4 Everybody!
  2. 钱颖一:人工智能将使中国教育优势荡然无存
  3. 2021下半年软考分数线会有变动吗?
  4. SQL读取树型所有下级或所有上级
  5. maven各个属性参数详解
  6. tcp状态机-三次握手-四次挥手以及常见面试题
  7. 大数据Hadoop2.x与Hadoop3.x相比较有哪些变化
  8. 【回文串9】LeetCode 409. Longest Palindrome
  9. jQuery淡入淡出
  10. php smarty 模板注释,smarty中的注释
  11. 数据结构视频教程 -《小甲鱼全套教程之C C++数据结构系列教程》
  12. python计算勾股定理公式_三角函数、公式、勾股定理、三角形
  13. 计算机中常用的时间换算
  14. 百度界面代码及效果展示
  15. Win软件 - 教你正确使用 Win10 专业版系统自带远程桌面(免费内网穿透)
  16. 房产|9月全国70城房价出炉!快来看看你的城市房价变化
  17. 【Python 爬虫简单的JavaScript逆向实战】抓取中国电影票房的数据
  18. 初学XML,xmlns的含义
  19. 微信小程序自定义分享功能开发笔记
  20. 【沃顿商学院学习笔记】管理学——09行业对腐败的控制 Corruption Control By Industries

热门文章

  1. 20.有效的括号(力扣leetcode) 博主可答疑该问题
  2. SQLyog安装成功步骤(附带码),2021版最新
  3. jsp android 交互,Android中HTTP几种请求和响应的代码实现
  4. Java修改带回显吗_修改的是根据自定义标签进行处理回显
  5. rocketmq集群搭建 双主双从
  6. 只需一个技巧,用手机轻松拍出震撼广角风景照
  7. springboot+easyui+jpa实现动态权限角色的后台管理系统(二)
  8. 解决SilverLight的图片裁剪问题
  9. pragma预处理指令详解
  10. 一个完整的接口技术解决方案(一)