题目名称 2558. [NOIP 2016]换教室
输入输出 classrooma.in/out
难度等级 ★★★☆
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 25
题目来源 Gravatarcqw 于2016-11-21加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:185, 提交:764, 通过率:24.21%
Gravatar梦那边的美好ET 100 0.400 s 37.41 MiB C++
GravatarLGLJ 100 0.409 s 43.38 MiB C++
Gravatarop_组撒头屯 100 0.410 s 36.18 MiB C++
Gravatar┭┮﹏┭┮ 100 0.421 s 39.05 MiB C++
GravatarESAzl 100 0.469 s 107.70 MiB C++
Gravatar┭┮﹏┭┮ 100 0.484 s 39.05 MiB C++
GravatarFuryton 100 0.500 s 37.41 MiB C++
GravatarRegnig Etalsnart 100 0.547 s 37.08 MiB C++
Gravatar梦那边的美好ET 100 0.578 s 65.20 MiB C++
GravatarBennettz 100 0.587 s 62.27 MiB C++
本题关联比赛
2017noip
刷题ing
关于 换教室 的近10条评论(全部评论)
注意初始化要彻底
Gravatar┭┮﹏┭┮
2024-04-23 21:15 10楼
用memset保你退役o( ̄▽ ̄)d
Gravatar做个人吧
2018-10-13 20:28 9楼
夜深人静,是写题的好时候。
GravatarJustWB
2017-11-10 01:55 8楼
zz地打错了文件名
zz地打错了for循环边界
zz地打错了数组名
我。。。
GravatarHzoi_Mafia
2017-10-27 16:29 7楼
居然v是可以用floyed的,真的要认真审题qwq(p。s。内个状态转移方程贼长)
Gravatar芒硝
2017-10-09 16:49 6楼
没判重边->4分,判了初始值没设完->16分,设完初始值 j=0的情况没更新->44分,更新了j->100
这题方程应该都是很快能想出来的。。。但是样例太弱 有些情况没注意自己又马虎就能从100变到5分 希望考试的时候自己能注意重边自环等情况。
Gravatarnonamenotitle
2017-09-02 16:20 5楼
n、v不清……身败名裂……
贴题解:http://www.cnblogs.com/Loser-of-Life/p/7182617.html
GravatarHZOI_蒟蒻一只
2017-07-15 14:34 4楼
状态不能设为“第i个,还有j次申请,站在C/D”,因为这样会导致你在下一个C处min一下,下一个D处也min一下,而这两个min的结果可能是不同的。你必须对二者的混合概率一块min,所以状态必须是"第i个,还有j次申请,当前这个有没有申请"。
老年选手身败名裂……
Gravatarcstdio
2017-01-31 21:13 3楼
DP大法好(hou)
前两次提交竟然又把数组开小
GravatarShirry
2016-12-13 13:21 2楼
考场上忘了把不动的距离设为0
GravatarFoolMike
2016-11-23 13:08 1楼

2558. [NOIP 2016]换教室

★★★☆   输入文件:classrooma.in   输出文件:classrooma.out   简单对比
时间限制:1 s   内存限制:256 MiB

【题目描述】

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

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

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

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

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

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

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

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

【输入格式】

第一行四个整数 $n, m, v, e$ 。

$n$ 表示这个学期内的时间段的数量;

$m$ 表示牛牛最多可以申请更换多少节课程的教室;

$v$ 表示牛牛学校里教室的数量;

$e$ 表示牛牛的学校里道路的数量。

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

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

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

接下来 $e$ 行,每行三个正整数 $a_j, b_j, w_j$,表示有一条双向道路连接教室 $a_j$ 和 $b_j$,通过这条道路需要耗费的体力值是 $W_j$,保证 $1 \leq a_j, b_j \leq v,1 \leq w_j \leq 1000$$。

保证 $1 \leq n \leq 2000,0 \leq m \leq 2000,1 \leq v \leq 300,0 \leq e \leq 90000$。

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

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

【输出格式】

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

测试数据保证四舍五入后的答案和准确答案的差的绝对值不大于 $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.道路中可能会有多条双向道路连接相同的两间教室。也有可能有道路两端连接的是同一间教室。

2.请注意区分 $n, m, v, e$ 的意义,$n$ 不是教室的数量,$m$ 不是道路的数量。

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

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

【来源】

$NOIP2016$