[NOIp2016提高组]换教室
题目大意:
有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提高组]换教室的更多相关文章
- Luogu P1850 [NOIp2016提高组]换教室 | 期望dp
题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...
- 洛谷 1850 NOIP2016提高组 换教室
[题解] 先用floyed处理出两点间的最短路. 设f[i][j][k]表示走到第i个教室,总共换了j次,当前换或者不换,期望的最小移动距离. 分情况讨论来转移即可. #include<cstd ...
- 题解 P1850 [NOIP2016 提高组] 换教室
做完这道题才略微感觉自己懂了一点关于概率与期望的知识QAQ... 一:关于概率与期望的定义 转载节选于blog 1.什么是数学期望? 数学期望亦称期望.期望值等.在概率论和统计学中,一个离散型随机变量 ...
- 【题解】NOIP2016提高组 复赛
[题解]NOIP2016提高组 复赛 传送门: 玩具谜题 \(\text{[P1563]}\) 天天爱跑步 \(\text{[P1600]}\) 换教室 \(\text{[P1850]}\) 组合数问 ...
- 【题解】NOIP2016 提高组 简要题解
[题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #inc ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- [日记&做题记录]-Noip2016提高组复赛 倒数十天
写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...
- noip2016 提高组
T1 玩具谜题 题目传送门 这道题直接模拟就好了哇 233 #include<cstdio> #include<cstring> #include<algorithm&g ...
- NOIP2016 DAY1 T3 换教室
换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内 ...
随机推荐
- Windows Resizer
Windows ResizerWindows Resizer是chrome浏览器插件,可以调整视口大小
- SpringBoot工程目录配置
Spring Boot建议的目录结果如下: root package结构:com.example.myproject com +- example +- myproject +- Applicat ...
- LCD实验学习笔记(十):TFT LCD
硬件组成: REGBANK是LCD控制寄存器组,含17个寄存器及一块256*16的调色板,用来设置参数. LCDCDMA中有两个FIFO,当FIFO空或数据减少到阈值,自动发起DMA传输,从内存获取图 ...
- perl6 修改文件并覆盖
use v6; my $filename = 'data.txt'; my $data = slurp $filename; say $data; $data ~~ s/'4'/'ABC'/; say ...
- sublime在搜索的时候排除js文件
代码审计的时候sublime是一个神器.所以.... Ctrl + Shift + F /home/i3ekr/Desktop/coding/phpcms,*.php 这样就可以直接搜索所有的php文 ...
- Python3 嵌套函数
嵌套函数: 函数体内用def定义函数 注意:函数体中调用其他函数不算嵌套函数,只能是函数的调用 简单的嵌套函数: 输出结果:
- python基础===继承
编写类时,并非总是要从空白开始.如果你要编写的类是另一个现成类的特殊版本,可使用继承.一个类继承另一个类时,它将自动获得另一个类的所有属性和方法:原有的类称为父类,而新类称为子类.子类继承了其父类的所 ...
- mysql连接池优化笔记
中间件mycat是一个高性能的分表分库读写分离的中间件,但配置不好的情况会出现很多性能问题. 1.mycat-web的监控的准确性有问题,1.6-RELEASE ,1.0-SNAPSHOT (web ...
- 经典卷积网络模型 — VGGNet模型笔记
一.简介 VGGNet是计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研究的深度卷积神经网络.VGGNet探索了卷积神经网络深度与性能之间的 ...
- 搭建selenium+python自动化环境
1.安装python,下载地址:http://python.org---安装版本3.5.1 ps:自带setuptools和pip工具 2.然后,用pip安装开发Web App需要的第三方库:异步框架 ...