题目大意:
  有n节课,第i节课在c[i]上课,同时d[i]也有一节课d[i]。
  你有权利向教务处发出m次申请把自己的教室改到d[i],相应的批准概率是k[i]。
  教室是图上的一些点,其中每条边都有边权。
  问你上完所有课走的总路程的期望。

思路:
  动态规划。
  f[i][j][0/1]表示上了i个课,换了j次教室,这门课有没有换教室。
  转移方程为:
  f[i][j][0]=min(f[i-1][j][0]+dis[c[i-1]][c[i]],f[i-1][j][1]+dis[c[i-1]][c[i]]*(1-k[i-1])+dis[d[i-1]][c[i]]*k[i-1]);
  f[i][j][1]=min(f[i-1][j-1][0]+dis[c[i-1]][d[i]]*k[i]+dis[c[i-1]][c[i]]*(1-k[i]),f[i-1][j-1][1]+dis[d[i-1]][d[i]]*k[i-1]*k[i]+dis[d[i-1]][c[i]]*k[i-1]*(1-k[i])+dis[c[i-1]][d[i]]*(1-k[i-1])*k[i]+dis[c[i-1]][c[i]]*(1-k[i-1])*(1-k[i]));

 #include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int inf=0x7fffffff;
const int N=,M=,V=;
int c[N],d[N],dis[V][V];
double k[N],f[][M][];
int main() {
int n=getint(),m=getint(),v=getint(),e=getint();
for(register int i=;i<n;i++) c[i]=getint();
for(register int i=;i<n;i++) d[i]=getint();
for(register int i=;i<n;i++) scanf("%lf",&k[i]);
for(register int i=;i<=v;i++) {
for(register int j=;j<=v;j++) {
if(i!=j) dis[i][j]=inf;
}
}
for(register int i=;i<e;i++) {
const int u=getint(),v=getint(),w=getint();
dis[u][v]=dis[v][u]=std::min(dis[u][v],w);
}
for(register int k=;k<=v;k++) {
for(register int i=;i<=v;i++) {
if(dis[i][k]==inf) continue;
for(register int j=;j<=v;j++) {
if(dis[k][j]==inf) continue;
dis[i][j]=std::min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
for(register int j=;j<=m;j++) {
f[][j][]=f[][j][]=1e9;
}
f[][][]=f[][][]=;
for(register int i=;i<n;i++) {
for(register int j=;j<=m;j++) {
f[i&][j][]=f[i&][j][]=1e9;
}
f[i&][][]=std::min(f[!(i&)][][]+dis[c[i-]][c[i]],f[!(i&)][][]+dis[c[i-]][c[i]]*(-k[i-])+dis[d[i-]][c[i]]*k[i-]);
for(register int j=;j<=m;j++) {
f[i&][j][]=std::min(f[!(i&)][j][]+dis[c[i-]][c[i]],f[!(i&)][j][]+dis[c[i-]][c[i]]*(-k[i-])+dis[d[i-]][c[i]]*k[i-]);
f[i&][j][]=std::min(f[!(i&)][j-][]+dis[c[i-]][d[i]]*k[i]+dis[c[i-]][c[i]]*(-k[i]),f[!(i&)][j-][]+dis[d[i-]][d[i]]*k[i-]*k[i]+dis[d[i-]][c[i]]*k[i-]*(-k[i])+dis[c[i-]][d[i]]*(-k[i-])*k[i]+dis[c[i-]][c[i]]*(-k[i-])*(-k[i]));
}
}
double ans=1e9;
for(register int i=;i<=m;i++) {
ans=std::min(ans,std::min(f[!(n&)][i][],f[!(n&)][i][]));
}
printf("%.2f\n",ans);
return ;
}

[NOIp2016提高组]换教室的更多相关文章

  1. Luogu P1850 [NOIp2016提高组]换教室 | 期望dp

    题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...

  2. 洛谷 1850 NOIP2016提高组 换教室

    [题解] 先用floyed处理出两点间的最短路. 设f[i][j][k]表示走到第i个教室,总共换了j次,当前换或者不换,期望的最小移动距离. 分情况讨论来转移即可. #include<cstd ...

  3. 题解 P1850 [NOIP2016 提高组] 换教室

    做完这道题才略微感觉自己懂了一点关于概率与期望的知识QAQ... 一:关于概率与期望的定义 转载节选于blog 1.什么是数学期望? 数学期望亦称期望.期望值等.在概率论和统计学中,一个离散型随机变量 ...

  4. 【题解】NOIP2016提高组 复赛

    [题解]NOIP2016提高组 复赛 传送门: 玩具谜题 \(\text{[P1563]}\) 天天爱跑步 \(\text{[P1600]}\) 换教室 \(\text{[P1850]}\) 组合数问 ...

  5. 【题解】NOIP2016 提高组 简要题解

    [题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #inc ...

  6. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

  7. [日记&做题记录]-Noip2016提高组复赛 倒数十天

    写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...

  8. noip2016 提高组

    T1 玩具谜题 题目传送门 这道题直接模拟就好了哇 233 #include<cstdio> #include<cstring> #include<algorithm&g ...

  9. NOIP2016 DAY1 T3 换教室

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

随机推荐

  1. c++ ui 库

    Dulib 比较流行的direct ui 界面框架 UIStone 据说金山词霸用着,查询资料甚少 DirectUI qq使用了据说,多学习学习吧 基于directUI的dulib不错 c盘没空间,运 ...

  2. BZOJ 4241: 历史研究——莫队 二叉堆

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4241 题意:N个int范围内的数,M次询问一个区间最大的(数字*出现次数)(加权众数),可以 ...

  3. rabbitmq和ons-rocketmq使用对比

    MQ,其实目的都是一样,就是应对系统的并发可以实现消峰和解耦的作用,类似于创建了一个线程异步操作,这一点可以了解一下一款优秀的并发框架(Disruptor),据说是每秒可以处理十万级数据, 目前据本人 ...

  4. springmvc中输出字符串

    /** * 输出文字 * @param response * @param s */ public static void responseOut(HttpServletResponse respon ...

  5. MySQL:按后缀缀批量删除表格

    Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_schema='s ...

  6. php各个版本的区别

    一. PHP 5.2.5.3.5.4.5.5.5.6 版本区别对比以及新功能详解 PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5. ...

  7. 【python】if __name__ == '__main__'

    转载自:http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html 当你打开一个.py文件时,经常会在代码的最下面看到if __na ...

  8. vscode的go插件安装

    vscode安装go的很多插件都是失败,如下: Installing 5 tools at E:\www\go_project\bin go-symbols guru gorename goretur ...

  9. MapReduce程序的几种提交运行模式

    本地模型运行 1/在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行      ----输入输出数据可以放在本地路径下(c:/wc/ ...

  10. hdu 5023

    A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100 ...