【题目描述】
对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程。
在可以选择的课程中,有2n节课程安排在n个时间段上。在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课程同时在不同的地点进行, 其中, 牛牛预先被安排在教室 ci上课, 而另一节课程在教室 di进行。
在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程。如果学生想更换第i节课程的教室,则需要提出中情。若申请通过,学生就可以在第 i个时间段去教室 di上课, 否则仍然在教室 ci上课。
由于更换教室的需求太多, 申请不一定能获得通过。 通过计算, 牛牛发现申请更换第 i节课程的教室时, 中情被通过的概率是一个已知的实数 ki, 并且对于不同课程的申请, 被通过的概率是互相独立的。
学校规定, 所有的申请只能在学期开始前一次性提交, 并且每个人只能选择至多m节课程进行申请。 这意味着牛牛必须一次性决定是否申请更换每节课的教室, 而不能根据某些课程的申请结果来决定其他课程是否申请; 牛牛可以申请白己最希望更换教室的 m门课程,也可以不用完这m个中情的机会,甚至可以一门课程都不申请。
因为不同的课程可能会被安排在不同的教室进行, 所以牛牛需要利用课问时间从一间教室赶到另一间教室。
牛牛所在的大学有 v个教室,有 e条道路。每条道路连接两间教室, 并且是可以双向通行的。 由于道路的长度和拥;i者程度不同, 通过不同的道路耗费的体力可能会有所不同。当第i ( 1≤i≤n-1 )节课结束后,牛牛就会从这节课的教室出发,选择一条耗费体力最少的路径前往下一节课的教室。
现在牛牛想知道,申请哪几门课程可以使他因在教室问移动耗费的体力值的总和的期望值最小,请你帮他求出这个最小值。
【输入格式】
第一行四个整数 n,m,v,e 。 n表示这个学期内的时间段的数量; m表示牛牛最多可以申请更换多少节课程的教室; v表示牛牛学校里教室的数量; e表示牛牛的学校里道路的数量。
第二行n个正整数,第 i ( 1≤ i≤ n)个正整数表示c,,即第 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 。 (如果你不知道什么是浮点误差, 这段话可以理解为: 对于大多数的算法, 你可以正常地使用浮点数类型而不用对它进行特殊的处理)
【样例输入】
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<=2000
1<=m<=2000
1<=v<=300
【分析】
f[i,j,0]表示到第i次课时申请j次并且该次不申请的期望最小值
f[i,j,1]表示到第i次课时申请j次并且该次申请的期望最小值
dist[i,j]表示i,j之间的最短路

uses math;
varn,m,v,e,i,j,k,x,y,t:longint;ans:real;dist:array[0..1001,0..1001]of longint;c,d:array[0..2001]of longint;w:array[0..2001]of real;f:array[0..2001,0..2001,0..1]of real;
beginread(n,m,v,e);for i:=1 to n do read(c[i]);for i:=1 to n do read(d[i]);for i:=1 to n do read(w[i]);fillchar(dist,sizeof(dist),$7f);for i:=1 to v do dist[i,i]:=0;for i:=1 to e do beginread(x,y,t);dist[x,y]:=min(dist[x,y],t);dist[y,x]:=min(dist[y,x],t);end;for k:=1 to v dofor i:=1 to v dofor j:=1 to v doif dist[i,j]>dist[i,k]+dist[k,j] then dist[i,j]:=dist[i,k]+dist[k,j];fillchar(f,sizeof(f),$7f);f[1,0,0]:=0;f[1,1,1]:=0;for i:=2 to n do beginf[i,0,0]:=f[i-1,0,0]+dist[c[i-1],c[i]];for j:=1 to min(i,m) do beginf[i,j,0]:=min(f[i-1,j,0]+dist[c[i-1],c[i]],f[i-1,j,1]+w[i-1]*dist[d[i-1], c[i]]+(1-w[i-1])*dist[c[i-1],c[i]]);f[i,j,1]:=min(f[i-1,j-1,0]+w[i]*dist[c[i-1],d[i]]+(1-w[i])*dist[c[i-1], c[i]],f[i-1,j-1,1]+w[i-1]*w[i]*dist[d[i-1],d[i]]+(1-w[i-1])*w[i]*dist[c[i-1],d[i]]+w[i-1]*(1-w[i])*dist[d[i-1],c[i]]+(1-w[i-1])*(1-w[i])*dist[c[i-1],c[i]]);end;end;ans:=f[n,0,0];for i:=1 to m do ans:=min(ans,min(f[n,i,0],f[n,i,1]));write(ans:0:2);
end.

转载于:https://www.cnblogs.com/JRX2015U43/p/6533488.html

换教室(NOIP2016提高组Day1T3)相关推荐

  1. NOIP2016提高组Day1T3 换教室

    分析 这是一道期望题, 设fi,j,0/1f_{i,j,0/1} 表示第i间教室,第j次申请,0是前一次没有提交申请,1是前一次提交了申请的最小期望. 转移比较简单,但是有一定麻烦. 因为v很小, 所 ...

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

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

  3. [NOIP2016 提高组] 愤怒的小鸟

    [NOIP2016 提高组] 愤怒的小鸟 题意: 有n只猪,给出猪的坐标(xi,yi),问最少用几个形如 y=ax^2+bx 的曲线可以保证所有猪在曲线上,满足a<0,a,b为实数 n<= ...

  4. 【NOIP2016提高组】天天爱跑步

    题目背景 NOIP2016 提高组 Day1 T2 题目描述 小 C 同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每 ...

  5. #185. [NOIP2016 提高组] 蚯蚓题解

    #185. [NOIP2016 提高组] 蚯蚓题解 题目描述 本题中,我们将用符号 ⌊c⌋\lfloor c \rfloor⌊c⌋ 表示对 ccc 向下取整,例如:⌊3.0⌋=⌊3.1⌋=⌊3.9⌋= ...

  6. NOIP2016 提高组 解题报告

    说明:由于我能力的限制,文章中的做法不一定是最优秀的算法,但官方数据全部测试通过,使用的全部知识全部是NOIP提高组的知识,请组织放心查看. 感谢 GoodQt 的指导与帮助 DAY1 T1 玩具谜题 ...

  7. 【jzoj4905】【NOIP2016提高组】【†换教室】【动态规划】【期望】

    题目大意 解题思路 先跑一次Floyd求出两点之间的距离,f[i][0,1]为第i个点申不申请到终点的期望,由于期望的线性性,和的期望等于期望和,所以可以很容易求出相邻两个点申不申请的期望,直接dp即 ...

  8. NOIP2016提高组复赛解题报告

    Day1 T1-玩具谜题 Day1 T2-天天爱跑步 Day1 T3-换教室 Day2 T1-组合数问题 Day2 T2-蚯蚓 Day2 T3-愤怒的小鸟 转载于:https://www.cnblog ...

  9. 洛谷P1563 [NOIP2016 提高组] 玩具谜题 C语言 通俗易懂解法

    题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singersi ...

最新文章

  1. django html数据库连接,Django数据库连接的问题
  2. 全面认识网络诊断命令功能与参数——netsh diagnostic命令
  3. Xamarin XAML语言教程Xamarin.Forms中程序状态与进度(一)
  4. jQuery 使用 jQuery UI 部件工厂编写带状态的插件(翻译)
  5. CentOS6在使用yum install 时提示镜像源路径不存在:PYCURL ERROR 22 - “The requested URL returned error: 404 Not Found
  6. 路径总和 III—leetcode437
  7. servlet 异常处理_Servlet异常和错误处理示例教程
  8. 【转】chrome浏览器的跨域设置——包括版本49前后两种设置
  9. Spark : DNS resolution failed for url in bootstrap.servers xx:9092
  10. 【干货】2020年人工智能十大技术进展及2021年十大技术趋势.pdf(附下载链接)...
  11. RecyclerView的各种版本兼容问题处理集锦
  12. 2-7 StatusStrip 控件
  13. react-router的BrowserHistory 和 HashHistory 的区别,如何解决使用BrowserHistory 引起的访问路径问题
  14. 微信小程序云开发教程-微信小程序的JS基础-视图层数据更新
  15. 数据库mysql项目实战 一
  16. 浅谈JAVA中Calendar类FirstDayOfWeek的问题
  17. es - elasticsearch - search - DSL - specialized - pinned
  18. python txt文本转json格式
  19. 个人计算机使用的标准键盘,电脑键盘的基本操作规范 -电脑资料
  20. 1.计算机图形学 实验 线条(利用C语言图形函数绘图)

热门文章

  1. http status 状态码汇总
  2. 14.Xcode8imageview图片圆角不显示的bug
  3. spark streaming限制吞吐
  4. 用PHP生成随机数的函数
  5. SQL按字段分组取最大(小)值记录(重复记录)
  6. 数据结构上机实践第14周项目1 - 验证算法(折半查找)
  7. rails使用html form,Rails 页面多选下拉框, form_for, form_tag 使用技巧及 select2 使用
  8. pid算法matlab仿真程序和c程序,pid算法matlab仿真程序和c程序.doc
  9. java验证码功能一般怎么做的_java制作简单验证码功能
  10. 破解sourceInsight4