[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)个时间段上,两节内 ...
随机推荐
- 纠结于arch+xfce还是xubuntu
现在用的是ubuntu gnome版 http://www.tuicool.com/articles/6r22eyU 现在纠结于arch+xfce还是xubuntu,因为不想在gnome下面搞什么美化 ...
- 时间盲注脚本.py
时间盲注脚本 #!/usr/bin/env python # -*- coding: utf-8 -*- import requests import time payloads = 'abcdefg ...
- Exploring Qualcomm's TrustZone Implementation
转自 http://bits-please.blogspot.com/2015/08 (需要FQ, 狗日的墙) In this blog post, we'll be exploring Qua ...
- Linux 入门记录:二、Linux 文件系统基本结构
一.树状目录结构 Linux 文件系统是一个倒置的单根树状结构.文件系统的根为"/":文件名严格区分大小写:路径使用"/"分割(Windows 中使用" ...
- ERROR 1682 (HY000)
ERROR 1682 (HY000) xtrabackup 恢复数据库后,出现1682错: root@localhost [(none)]>show global variables like ...
- Linux设备驱动--内存管理
MMU具有物理地址和虚拟地址转换,内存访问权限保护等功能.这使得Linux操作系统能单独为每个用户进程分配独立的内存空间并且保证用户空间不能访问内核空间的地址,为操作系统虚拟内存管理模块 ...
- NOIP 2011 Day2
tags: 贪心 模拟 NOIP categories: 信息学竞赛 总结 计算系数 Solution 根据二项式定理, \[ \begin{align} (a+b)^n=\sum_{k=0}^nC_ ...
- win10网速慢
升级到win10之后发现网速特别慢,搜了下,网上的解决办法果然好使,按照如下操作即可. 返回桌面,按WIN+R键组合,运行gpedit.msc 打开组策略 依次展开管理模板->网络->Qo ...
- 微信小程序-ios系统-下拉上拉出现白色,如何处理呢?
这几天做小程序,有些页面都是全屏的背景,在安卓上背景是固定的,而在ios上上拉下拉出现白色,测试说体验不太好,一开始我以为是下拉上拉刷新造成的,关闭了依然是这样.为了体验好点,可以按一下解决: 方式一 ...
- Linux下GCC相关知识点
摘要: 总结GCC的具体使用,动态库静态库的相关问题 参考资料: <Linux网络编程> ISBN:9787302207177 p19 1 GCC简介 GCC是Linux下的编译工具集,是 ...