洛谷P1850 换教室
令人印象深刻的状态转移方程...
f[i][j][0/1]表示前i个换j次,第i次是否申请时的期望。
注意可能有重边,自环。
转移要分类讨论,距离是上/这次成功/失败的概率乘相应的路程。
从上次的0/1中取min
#include <cstdio>
#include <cstring>
#include <algorithm>
const int N = , M = ;
const double INF = 1.0 * 0x3f3f3f3f; inline void read(int &x) {
x = ;
char c = getchar();
while(c > '' || c < '') {
c = getchar();
}
while(c >= '' && c <= '') {
x = (x << ) + (x << ) + c - ;
c = getchar();
}
return;
} int G[N][N], a[M], b[M];
double k[M], f[M][M][]; int main() {
int n, m, v, e;
read(n);
read(m);
read(v);
read(e);
for(int i = ; i <= n; i++) {
read(a[i]);
}
for(int i = ; i <= n; i++) {
read(b[i]);
}
for(int i = ; i <= n; i++) {
scanf("%lf", &k[i]);
}
int x, y, z;
memset(G, 0x3f, sizeof(G));
for(int i = ; i <= e; i++) {
read(x);
read(y);
read(z);
if(G[x][y]) {
G[y][x] = G[x][y] = std::min(G[x][y], z);
}
else {
G[x][y] = G[y][x] = z;
}
} /// floyd
for(int i = ; i <= v; i++) {
G[i][i] = ;
}
for(int p = ; p <= v; p++) {
for(int i = ; i <= v; i++) {
for(int j = ; j <= v; j++) {
G[i][j] = std::min(G[i][j], G[i][p] + G[p][j]);
}
}
} for(int i = ; i <= n; i++) {
for(int j = ; j <= m; j++) {
f[i][j][] = f[i][j][] = INF;
}
}
f[][][] = f[][][] = ;
for(int i = ; i <= n; i++) {
for(int j = ; j <= m; j++) {
f[i][j][] = std::min(f[i - ][j][] + G[a[i - ]][a[i]],
f[i - ][j][]
+ G[b[i - ]][a[i]] * k[i - ]
+ G[a[i - ]][a[i]] * ( - k[i - ]));
if(j) {
f[i][j][] = std::min(f[i - ][j - ][]
+ G[a[i - ]][b[i]] * k[i]
+ G[a[i - ]][a[i]] * ( - k[i]),
f[i - ][j - ][]
+ G[b[i - ]][b[i]] * k[i - ] * k[i]
+ G[b[i - ]][a[i]] * k[i - ] * ( - k[i])
+ G[a[i - ]][b[i]] * ( - k[i - ]) * k[i]
+ G[a[i - ]][a[i]] * ( - k[i - ]) * ( - k[i]));
}
}
} double ans = INF; for(int i = ; i <= m; i++) {
ans = std::min(ans, f[n][i][]);
ans = std::min(ans, f[n][i][]);
}
printf("%.2lf", ans); return ;
}
AC代码
我一开始把ans初值设的是0...
洛谷P1850 换教室的更多相关文章
- 洛谷 P1850 换教室 解题报告
P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1≤i≤n) ...
- 洛谷——P1850 换教室
P1850 换教室 有 2n 节课程安排在 nn 个时间段上.在第 i个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 $c_i$ 上课,而另一节课程在教室 $d_i$ ...
- 洛谷 P1850 换教室
P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq ...
- 洛谷P1850换教室
题目传送门 理解题意:给定你一个学期的课程和教室数量以及教室之间的距离还有换教室成功的概率,求一个学期走的距离的期望最小值 题目是有够恶心的,属于那种一看就让人不想刷的题目...很明显的动规,但是那个 ...
- 洛谷P1850 换教室(概率dp)
传送门 我的floyd竟然写错了?今年NOIP怕不是要爆零了? 这就是一个概率dp 我们用$dp[i][j][k]$表示在第$i$个时间段,已经申请了$j$次,$k$表示本次换或不换,然后直接暴力转移 ...
- 洛谷P1850 换教室 [noip2016] 期望dp
正解:期望dp 解题报告: 哇我发现我期望这块真的布星,可能在刷了点儿NOIp之后会去搞一波期望dp的题...感觉连基础都没有打扎实?基础概念都布星! 好那先把这题理顺了嗷qwq 首先我们看到期望就会 ...
- 洛谷P1850 换教室_数学期望_Floyd
调了一下午QAQ-让我对数学期望的理解又提升了一个层次. 首先,我们发现 v<=300v<=300v<=300 , 这样我们就可以用 FloydFloydFloyd 算法来 O(n3 ...
- bzoj4720 / P1850 换教室(Floyd+期望dp)
P1850 换教室 先用Floyd把最短路处理一遍,接下来就是重头戏了 用 f [ i ][ j ][ 0/1 ] 表示在第 i 个时间段,发出了 j 次申请(注意不一定成功),并且在这个时间段是否( ...
- P1850 换教室
P1850 换教室 现在有一张图, 有 \(v <= 300\) 个节点 你需要从 \(c_{1}\) 到 \(c_{2}\) 到 \(c_{n} (n <= 2000)\) 现在你有 \ ...
随机推荐
- 懒人小工具:T4生成实体类Model,Insert,Select,Delete以及导出Excel的方法
由于最近公司在用webform开发ERP,用到大量重复机械的代码,之前写了篇文章,懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法,但是有人觉得这种方法 ...
- springboot+thymeleaf刨坑——首页加载js/css等失败解决方法
在使用thymeleaf加载css或js样式,当我们进入登录页的时候发现,所有的样式都是加载失败的.原因是在新版中有这样一个坑……: 当我们设置了addInterceptors-注册拦截器的时候,通常 ...
- Ionic 入门与实战之第三章:Ionic 项目结构以及路由配置
原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第三章,主要对 Ionic 的项目结构作了介绍,并讲解了Ionic 中的路由概念以及相关配置. 原文发表于我的技术博客 1. Ioni ...
- Centos7.2下OpenVPN 环境完整部署记录
关于OpenVPN的有关介绍及为何使用OpenVPN在此就不做赘述了,下面直接记录Centos7.2系统下部署OpenVPN环境的操作过程: 1) 先将本机的yum换成阿里云的yum源 [root@t ...
- LDAP学习笔记总结
一.LDAP概念LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根 ...
- Python练习-8
1,复习 ascii:字母,数字,特殊字符:1个字节,8位 Unicode:16位 两个字节 升级 32 位 四个字节 utf-8:最少一个字节 8位表示. 英文字母 8位 1个字节 欧洲16位,2个 ...
- ACM找bug方案
测试数据和一些常见的数据都通过了然而还是wrong,可以试试下面的一些解决方案: 1.数据爆掉 ① 可以改变数据类型,以容纳 ② 修改当前算法,比如a*a/b可以改写成a/b*a 2 特殊情况,例 ...
- Visual Studio2013安装过程以及单元测试
一.安装环境 操作系统版本:Windows10家庭中文版64位 CPU:i5-4200u 1.60GHz 硬盘内存:750G 二.安装版本 Visual Studio2013 三.安装过程 Visu ...
- 阅读<构建之法>第10、11、12章
第10章 典型用户和场景 10.2 规格说明书 10.3 功能驱动的设计 问题:怎样写好spec?功能驱动设计的功能设计阶段怎样实现一个具体的功能? 第11章 软件设计与实现 11.2开发阶段的日常管 ...
- "一个程序员的生命周期"读后感
这篇文章中作者叙述了自己和大多数大学生或许都会面对的问题,即是会走过挺多的歪路,面临很多的困难和压力,但是作者却从未放弃自己真正追求的东西.对于一个过来人的经验之谈,我们应该吸取经验,在大学好好去奋斗 ...