题目地址

https://www.luogu.org/problem/P1850

题解

这题的转移其实挺好想的但是方程特别长...真的特别长...
首先设\(f[i,j,0/1]\)表示当前在第\(i\)个位置,申请了\(j\)次,当前这次申请了/没申请,\(a[i]\)为当前被安排的课室位置,\(b[i]\)为可申请的课室位置,\(p[i]\)为申请通过的概率,\(d[i][j]\)表示\(i\)到\(j\)的最短路。
那么对于\(f[i,j,0]\),分类上一次申请了和上一次没有申请两种情况来转移,上一次没申请了就直接转移,上一次申请了就分别讨论申请通过的情况和没通过的情况,然后加起来即可。
\(f[i][j][0]=\min \{ f[i-1][j][0]+d[a[i-1]][a[i]],f[i-1][j][1]+d[a[i-1]][a[i]]*(1-p[i-1])+d[b[i-1]][a[i]]*p[i-1]\}\)
对于\(f[i,j,1]\),共四种情况需要组合,并且因为两次申请互相独立,所以需要乘法原理乘起来(我第一次就是写成了加法然后挂掉了)。
\(f[i][j][1]=\min(f[i-1][j-1][0]+d[a[i-1]][b[i]]*p[i]+d[a[i-1]][a[i]]*(1-p[i]),f[i-1][j-1][1]+d[a[i-1]][a[i]]*(1-p[i-1])*(1-p[i])+d[a[i-1]][b[i]]*p[i]*(1-p[i-1])+d[b[i-1]][a[i]]*(p[i-1])*(1-p[i])+d[b[i-1]][b[i]]*p[i-1]*p[i])\)

#include <bits/stdc++.h>
using namespace std;int d[310][310];
int a[2010], b[2010];
int n, m, V, E;
double p[2010], f[2010][2010][2];
// f[i][j][0/1] 表示第i间教室换了j次这次换/不换int main() {memset(d, 0x3f, sizeof(d));scanf("%d%d%d%d", &n, &m, &V, &E);for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);for(int i = 1; i <= n; ++i) scanf("%d", &b[i]);for(int i = 1; i <= n; ++i) scanf("%lf", &p[i]);for(int u, v, w, i = 1; i <= E; ++i) {scanf("%d%d%d", &u, &v, &w);d[v][u] = d[u][v] = min(d[u][v], w);}for(int i = 1; i <= V; ++i) d[i][i] = d[i][0] = d[0][i] = 0;for(int k = 1; k <= V; ++k) for(int i = 1; i <= V; ++i) for(int j = 1; j <= V; ++j) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);for(int i = 0; i <= n; ++i) for(int j = 0; j <= m; ++j) f[i][j][0] = f[i][j][1] = 1e17;f[1][0][0] = f[1][1][1] = 0;for(int i = 2; i <= n; ++i) {f[i][0][0] = f[i - 1][0][0] + d[a[i - 1]][a[i]];for(int j = 1; j <= min(i, m); ++j) {f[i][j][0] = min(f[i][j][0], min(f[i-1][j][0]+d[a[i-1]][a[i]], f[i-1][j][1]+d[a[i-1]][a[i]]*(1-p[i-1])+d[b[i-1]][a[i]]*p[i-1]));f[i][j][1] = min(f[i][j][1], min(f[i-1][j-1][0]+d[a[i-1]][b[i]]*p[i]+d[a[i-1]][a[i]]*(1-p[i]), f[i-1][j-1][1]+d[a[i-1]][a[i]]*(1-p[i-1])*(1-p[i])+d[a[i-1]][b[i]]*p[i]*(1-p[i-1])+d[b[i-1]][a[i]]*(p[i-1])*(1-p[i])+d[b[i-1]][b[i]]*p[i-1]*p[i]));}}double ans = 1e17;for(int i = 0; i <= m; ++i) ans = min(ans, min(f[n][i][0], f[n][i][1]));printf("%.2lf\n", ans);
}

转载于:https://www.cnblogs.com/henry-1202/p/11448555.html

LGOJP1850 换教室相关推荐

  1. BZOJ 4720 [Noip2016]换教室

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

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

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

  3. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  4. [NOIP2016]换教室(概率期望$DP$)

    其实吧我老早就把这题切了--因为说实话,这道题确实不难啊--李云龙:比他娘的状压DP简单多了 今天我翻以前在Luogu上写的题解时,突然发现放错代码了,然后被一堆人\(hack\)--蓝瘦啊\(ORZ ...

  5. 通过查询教室课表,选择最佳的空教室自习(少换教室) Python 附源码

    运行效果: 1.思路 通过查询空教室安排出每一天的最佳自行地点 1.读取2个excel文件(实践课教室课表+理论课教室课表) 2.生成一个三维矩阵 3.第一维:星期几(从低到高层直接就对应星期几,一共 ...

  6. 【NOIp2016 day1t3】换教室

    NOIP第一次考期望,着实吓一跳... 读入之后, 由于 n<=200 n <= 200 n,给我们建立了天然的 floyd f l o y d floyd的机会, 建完图之后,能够顺利的 ...

  7. noip2016 换教室

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

  8. Luogu P1850换教室【期望dp】By cellur925

    题目传送门 首先这个题我们一看它就是和概率期望有关,而大多数时候在OI中遇到他们时,都是与dp相关的. \(Vergil\)学长表示,作为\(NOIp2016\)的当事人,他们考前奶联赛一定不会考概率 ...

  9. 【BZOJ4720】【NOIP2016】换教室

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

  10. Noip2016换教室

    传送门! Simple Description: 牛牛有$n$节课要上,每个时段都有$2$个教室在上课(具体来说是第$c[i]$与第$d[i]$个教室),牛牛在其中的一个教室上课,牛牛起初每节课分别被 ...

最新文章

  1. 一篇文章让你了解智能合约以及和区块链的关系
  2. 76项!海南省崖州湾种子实验室揭榜挂帅项目立项结果公示
  3. Spring Boot 2.4版本前后的分组配置变化及对多环境配置结构的影响
  4. android 配置ADB环境
  5. 前端学习(2933):vue中的循环语句
  6. java ask to_Java native和ASCII 互转工具Native2AsciiUtils.java下载
  7. mysql多源复制 知乎_技术分享 | MySQL 多源复制场景分析
  8. 请编写一个c程序确定signed,unsigned的char,short,int和long变量取值范围
  9. 余弦相似度 高维数据_海量高维数据与近似最近邻
  10. DOS各版本下载地址
  11. 利用Python(netCDF4库)读取.nc文件(NetCDF气象数据文件)的基本操作
  12. h5完整抽奖系统带php后台(含数据库脚本)
  13. 谷歌学术打不开的解决办法
  14. Qt的对话框与窗口--自定义的对话框
  15. Python 实现字节转换函数
  16. 深度模型训练之learning rate
  17. 2022-2027年中国农用机械融资租赁行业发展监测及投资战略咨询报告
  18. 日本即将上市的三维条形码
  19. JQuery验证手机号电话号码
  20. 如何在 Linux 服务器上安装 Red5?

热门文章

  1. 直推学习(transductive learning)
  2. 拓端tecdat|R语言DTW(Dynamic Time Warping) 动态时间规整算法分析序列数据和可视化
  3. 拓端tecdat|R语言中进行Spearman等级相关分析
  4. mysql截取小数点后4位_MySQL 截取小数位数
  5. 将MNIST数据集转化为png文件
  6. early stopping softmax批量梯度下降(BGD)手动实现
  7. 飞思卡尔单片机c语言编程详解,飞思卡尔单片机PIT汇编编程(一)
  8. mysql数据库如何新建查询_数据库新建查询
  9. pybaobabdt 推荐一款超高颜值的模型可视化库
  10. c语言遗传算法实例ppt,遗传算法的C语言程序案例.doc