[洛谷P1850]换教室 概率与期望

洛谷 P1850 [NOIP2016 提高组] 换教室 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。在可以选择的课程中,有2n节课程安排在n个时间段上。在第i(1\leqi\leqn)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 c[i]上课,而另一节课程在教室d[i]进行。在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程。如果学生想更换第i节课程的教室,则需要提出申请。若申请通过,学生就可以在第i个时间段去教室d[i]上课,否则仍然在教室c[i]上课。 阅读详情

题目←
要分清哪些状态是独立的,哪些状态对期望有影响
一开始傻傻的在通过和没通过之间取min……
事实上,在求期望的前提下,真正影响的决策是是否申请
以及万万没想到Floyd打次了
map[i][i] = 0才对


发现当前时间段的状态仅仅可以由上一时间段的状态转移来
上一时间段的情况可能有以下几种

1、申请了换教室,过
2、申请了换教室,没过
3、没申请换教室

如果没有概率且我们要求的只是最大/最小值,就在换、未换两种情况里取min
但发现我们每个时间段需要做的决策不是换/不换
而是申请/不申请
(1、2两种状态不是我们能够决策的,他们出现的概率已经确定)
所以每个时间点就申请/不申请划分状态
dp[i][j][0/1]表示i时间段,总共申请了j段,而第i段申请/未申请

来梳理状态间的关系:
设 Bi 为原教室, Ci 为更换后的教室
求i - 1 ~ i距离的时候,可能出现的状况有:
1、第i - 1时间段在 Bi−1 ,第i时间段在 Bi
2、第i - 1时间段在 Ci−1 ,第i时间段在 Bi
3、第i - 1时间段在 Bi−1 ,第i时间段在 Ci
4、第i - 1时间段在 Ci−1 ,第i时间段在 Ci

当阶段i我们选择不申请时:
第i时间段在 Bi 的概率:1
第i时间段在 Ci 的概率:0

若从第i - 1阶段未申请的状态转移过来
第i - 1时间段在 Bi−1 的概率:1
第i - 1时间段在 Ci−1 的概率:0
综上,这个转移为
dp[i][j][0] = dp[i - 1][j][0]
+ map[ Bi−1 ][ Bi ] * 1 * 1
+ map[ Ci−1 ][ Bi ] * 0 * 1
+ map[ Bi−1 ][ Ci ] * 1 * 0
+ map[ Ci−1 ][ Ci ] * 0 * 0;

类比一下,若从i - 1申请了的状态转移过来
第i时间段在 Bi 的概率:1
第i时间段在 Ci 的概率:0
第i - 1时间段在 Bi−1 的概率:P[i - 1]
第i - 1时间段在 Ci−1 的概率:1 - P[i - 1]

这个转移为
dp[i][j][0] = dp[i - 1][j][1]
+ map[ Bi−1 ][ Bi ] * (1 - P[i]) * 1//i - 1申请失败
+ map[ Ci−1 ][ Bi ] * P[i] * 1//i - 1申请成功
+ map[ Bi−1 ][ Ci ] * 1 * 0//失败
+ map[ Ci−1 ][ Ci ] * 0 * 0;//成功

继续类比
当阶段i我们选择申请时:
转移同样有两种可能,i - 1申请/未申请
i - 1未申请时:
第i时间段在 Bi 的概率:P[i]
第i时间段在 Ci 的概率:(1 - P[i])
第i - 1时间段在 Bi−1 的概率:1
第i - 1时间段在 Ci−1 的概率:0
这个转移为:
dp[i][j][0] = dp[i - 1][j][0]
+ map[ Bi−1 ][ Bi ] * 1 * P[i]
+ map[ Ci−1 ][ Bi ] * 0 * P[i]
+ map[ Bi−1 ][ Ci ] * 1 * (1 - P[i])
+ map[ Ci−1 ][ Ci ] * 0 * (1 - P[i]);

若从i - 1申请转来
第i时间段在 Bi 的概率:P[i]
第i时间段在 Ci 的概率:(1 - P[i])
第i - 1时间段在 Bi−1 的概率:P[i - 1]
第i - 1时间段在 Ci−1 的概率:1 - P[i - 1]
这个转移为:
dp[i][j][0] = dp[i - 1][j][0]
+ map[ Bi−1 ][ Bi ] * P[i - 1] * P[i]
+ map[ Ci−1 ][ Bi ] * (1 - P[i - 1]) * P[i]
+ map[ Bi−1 ][ Ci ] * P[i - 1] * (1 - P[i])
+ map[ Ci−1 ][ Ci ] * (1 - P[i - 1]) * (1 - P[i]);

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 1061109567
#define LL long long
using namespace std;
const int M = 2000 + 50;
LL map[M][M],c;
double dp[M][M][2],P[M];
int n,m,v,e;
int a,b,B[M],C[M];
int main(){
    scanf("%d%d%d%d",&n,&m,&v,&e);
    for(int i = 1;i <= n;i ++){
        scanf("%d",&B[i]);
    }
    for(int i = 1;i <= n;i ++){
        scanf("%d",&C[i]);
    }
    for(int i = 1;i <= n;i ++){
        scanf("%lf",&P[i]);
    }
    memset(map,0x3f,sizeof(map));
    for(int i = 1;i <= v;i ++){
        map[i][i] = 0;
    }
    for(int i = 1;i <= e;i ++){
        scanf("%d%d%lld",&a,&b,&c);
        if(map[a][b] > c)map[a][b] = c,map[b][a] = c;
    }
    for(int k = 1;k <= v;k ++){
        for(int i = 1;i <= v;i ++){
            for(int j = 1;j <= v;j ++){
                if(map[i][j] > map[i][k] + map[k][j] && map[i][j] != INF && map[k][j] != INF)
                    map[i][j] = map[i][k] + map[k][j];
            }
        }
    }
    for(int i = 0;i <= n;i ++){
        for(int j = 0;j <= n;j ++)
        dp[i][j][0] = dp[i][j][1] = INF;
    }
    dp[1][0][0] = dp[1][1][1] = 0;
    for(int i = 2;i <= n;i ++){
        for(int k = min(i,m);k >= 0;k --){
            dp[i][k][0] = min(dp[i][k][0],dp[i - 1][k][0] + map[B[i - 1]][B[i]]);
            dp[i][k][0] = min(dp[i][k][0],dp[i - 1][k][1] + map[B[i - 1]][B[i]]*(1 - P[i - 1])
                + map[C[i - 1]][B[i]]*P[i - 1]);
            //if(i >= 3 && !dp[i][k][0])printf("haha%d\n",i);
            if(k >= 1){
                dp[i][k][1] = min(dp[i][k][1],dp[i - 1][k - 1][0]
                                             + map[B[i - 1]][B[i]]*(1 - P[i]) + map[B[i - 1]][C[i]]*P[i]);
                dp[i][k][1] = min(dp[i][k][1],dp[i - 1][k - 1][1] + map[B[i - 1]][B[i]]*(1 - P[i - 1])*(1 - P[i])
                + map[C[i - 1]][B[i]]*P[i - 1]*(1 - P[i]) + map[B[i - 1]][C[i]]*(1 - P[i - 1])*P[i]
                + map[C[i - 1]][C[i]]*P[i - 1]*P[i]);
            }
        }
    }
    double ans = INF;
    for(int i = 0;i <= m;i ++){
        ans = min(ans,min(dp[n][i][0],dp[n][i][1]));
    }
    /*
    ans = 0;
    for(int i = 2;i <= n;i ++){
        ans += map[B[i - 1]][B[i]];
    }*/
    printf("%.2lf",ans);
}
手把手教你学Simulink--基于Simulink的高速公路自动驾驶场景仿真建模 特点车道保持:自动调整车辆方向以保持在车道中央。自适应巡航控制(ACC):根据前方车辆的速度自动调节车速。换道辅助:安全地变换车道以超过慢速行驶的车辆或准备驶离高速公路。紧急制动:检测潜在碰撞并采取措施避免事故。挑战安全性:确保所有功能在各种条件下都能可靠运行。实时性:处理大量传感器数据,并迅速做出反应。复杂性:集成多个子系统,包括感知、规划与控制。首先明确要模拟的任务内容。车辆需保持在车道内行驶。根据交通情况自动调整速度。安全地执行换道操作。在必要时实施紧急制动。 阅读详情

相关推荐

【TestCenter】RFC2544时延测试

本文介绍了使用Spirent TestCenter测试路由器PPPOE时延的RFC2544标准方法。RFC2544定义了三种时延类型:转发时延(LILO)、存储转发时延(LIFO)和直通时延(FIFO)。文章详细说明了测试步骤,包括测试拓扑搭建、PPPOE环境配置、RFC2544测试任务创建等关键环节,并介绍了如何设置时延参数和查看测试报告。测试结果表明,大字节帧的时延高于小字节帧,且负载越高时延越大。该测试方法遵循国际标准,可全面评估网络设备在不同负载下的性能表现。

lai_2020的博客 1401

洛谷P1850 NOIP2016 提高组 换教室

#include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; typedef long double ld; const ll N=5e3,V=1e3; ll n,m,t,e; ll room[N][2],dis[V][V]; ld pro[N],f[N][N]; int main() { scanf("%lld%lld%lld%lld",

群山中的菜鸡 183

LSF实践专题(15):LSF队列优先级以及抢占功能初探

在LSF暂停作业时,会向作业发送一个SIGTSTP信号,并且将作业状态变成SSUSP(system suspend),表示被系统暂停,这时,最好是作业的应用能够捕获和处理SIGTSTP信号,否则,即使在LSF中,作业会被认为暂停了,并且释放了slots资源,但是在实际OS中,作业进程仍然在继续,并且不会释放CPU等计算资源。是指LSF自动将低优先级作业暂停(suspend),将空余出来的资源交给高优先级队列中的作业使用,等到高优先级队列的作业结束后,再将被暂停的作业恢复(resume)并继续运行。

richycn的博客 1919

换教室(NOIP2016提高组Day1T3)

【题目描述】 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程。 在可以选择的课程中,有2n节课程安排在n个时间段上。在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课程同时在不同的地点进行, 其中, 牛牛预先被安排在教室 ci上课, 而另一节课程在教室 di进行。 在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安...

weixin_33831196的博客 291

Qt上位机实战:5步搞定STM32 IAP固件升级(附拖拽文件处理技巧)

本文详细介绍了如何使用Qt开发STM32 IAP固件升级上位机。通过五个核心步骤,包括理解IAP机制、搭建Qt环境、实现拖拽文件加载、封装串口通信以及设计可靠通信协议,帮助开发者快速构建一个稳定、易用且支持图形化操作的固件升级工具,显著提升嵌入式产品开发与维护效率。

ss78901的博客 1076

解决Docker拉取镜像报错:Get https://registry-1.docker.io/v2/: 报错

解决Docker拉取镜像报错: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection问题描述Get "https://registry-1.docker.io/v2/"是docker官方的镜像源,下载很慢的,一般会自己指定国内映射的加速镜像源。

qq_33650333的博客 4172

洛谷 #1850. 换教室

题意 有n个时间段,每个时间段有2节课,最多可以换m次课,概率给出 把校园抽象成无向图,求耗费最小体力值 题解 这是一道期望Dp,f[i][j][k]表示考虑到第i个教室,换了j次,k为0/1,表示这次是否换 分四种情况,具体见代码 调试记录 double的输入提示符是%lf,不是%llf 害老子调了一个小时害老子调了一个小时害老子调了一个小时 #include &lt;cstdio&gt; #i...

时间次元的博客 333

第 13 章:Spring AI Alibaba MCP 与 Nacos3 — 企业级MCP服务

理解Spring AI Alibaba 框架下的MCP服务与Nacos注册中心整合的必要性,学会Spring AI Alibaba-基于Nacos的MCP实现方法

paopao_wu的专栏 788

【NOIP2016提高】洛谷1850 换教室题解(概率期望+DP)

题目:luogu1850. 题目大意:给定vvv个教室,教室之间有eee条无向边边,保证连通.现在有nnn组教室,每组有一个被钦定的教室和一个可以替换的教室,现在给你mmm次替换教室的机会,以及当你打算替换掉一组教室时成功的概率,让你求最后依次经过你选择的教室的期望路径最小值. 我觉得我的题目大意好像解释得不是很清晰… 模拟赛考真题的时候由于我没有写过概率DP,然后一直调这道题调了3h,T2部分分...

hzk_cpp的博客 261

【Apache Paimon】-- 13 -- 利用 paimon-flink-action 同步 mysql 表数据

在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式(1)人工通知(比如常规的使用邮件),然后运维人员手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hive 的外部表和内部表 schema那么现在,有了 Paimon ,我们可以利用其特性,自动识别并同步 DDL 这些变化,并同步至 hive 的 paimon 格式表中。

欢迎来到我的博客,一起探索代码里的世界! 1249

Uniapp微信小程序:详解根据角色权限动态展示底部tabbar,支持不同身份显示不同底部导航+灵活权限组合完整源码,菜单切换不闪烁、秒加载不卡(提供动态原生Tabbar配置+自定义组件形式2种方案)

uni-app微信小程序实现根据用户不同角色显示不同的tabBar,uniapp微信小程序原生tabbar实现动态菜单导航,微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色,动态pages,uni-app微信小程序动态tabBar,根据不同用户展示不同的tabBar,uni-app微信小程序动态切换tabBar,根据不同用户角色展示不同的tabBar,微信小程序自定义底部tabbar动态修改,Uniapp小程序根据权限(角色)不同动态展示底部tabbar,解决tabbar闪烁卡顿问题,小

✅ 精选推荐文章 4284

【NOIP2016】洛谷1850 换教室

期望dp

YHaX的博客 788

T527 uart串口配置导致系统进不去

T527 s_uart串口配置导致系统进不去。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 675

洛谷P1850 [NOIP 2016 提高组] 换教室

NOIP2016 提高组 D1T3对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。在可以选择的课程中,有 2n2n2n 节课程安排在 nnn 个时间段上。在第 iii(1≤i≤n1 \leq i \leq n1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 cic_ici​ 上课,而另一节课程在教室 did_idi​ 进行。在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的 nnn 节安排好的课程。如果学生想更换第 iii

yjfyjfyjf54188的博客 947

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

洛谷 P1850 [NOIP 2016 提高组] 换教室

终于自己想出概率期望dpdpdp的状态了,但是依旧没能相对转移方程。(招笑)

m0_72761451的博客 1323

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

题解 luogu P1850 【换教室】

题解 luogu P1850 【换教室】 时间:2019.8.6 一晚上(约 3.5h 写完) 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。 在可以选择的课程中,有 \(2n\) 节课程安排在 \(n\) 个时间段上。在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排...

weixin_30678821的博客 389

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

P1850换教室 题解(概率dp)

1.上节课申请:f[1][i-1][j-1]+1.0*dis[c[i]][c[i-1]]*(1-k[i])*(1-k[i-1])+1.0*dis[c[i]][d[i-1]]*(1-k[i])*k[i-1]1.上节课申请:f[1][i-1][j]+k[i-1]*dis[c[i]][d[i-1]]+1.0*(1-k[i-1])*dis[c[i]][c[i-1]];2.上节课不申请:f[0][i-1][j]+dis[c[i]][c[i-1]];c[i],d[i],k[i]和题意里相同含义;

yusen_123的博客 1032

[NOIP2016TG] 洛谷 P1850 换教室

https://www.luogu.org/problem/P1850 题意?太长懒得概括。 期望概述 期望,记为\(E(x)\),是对于若干个概率事件,结果与概率之积的总和。 期望的数学意义是:对于一个结果均匀分布的事件,期望是无数次实验结果的平均值。 对于非均匀分布的事件,期望反映平均取值的大小。 掷骰tou子结果的平均数为3.5,这类问题说明非均匀分布事件的期望值可能不等于任何一个...

weixin_30832405的博客 613

洛谷 P1850 换教室

两题都是顺着dp的期望题。 题意:每次有p的概率让最前面的人上电梯,问T时间内上电梯人数的期望值。 简单方程f[i][j]表示当前时刻,最前面的人是第i个人,时刻是j时的期望。 #include <bits/stdc++.h> using namespace std; const int N=2e3+5; int n,t; double p,f[N][N]; int main(){ ...

Love_xyh的博客 201

【洛谷P1850】换教室

链接 首先看题,求什么全局最大值,基本可以确定是用动归。 我们先不考虑概率,那么问题转化为:上完N节课消耗的最小体力值是多少。 如何转移? 对于每个时间段,显然有换课有不换课两种选择,并且一节课的答案只与上一节课的答案有关。 可以用 dis [ i ] [ j ] 表示 [ i 教室 ] 到 [ j 教室 ] 的最短路(数据很小,可以预先Floyd处理出来) 用 f [ i ] [ 0...

Sakura_Chiyo的博客 365

洛谷P1850 换教室 题解

天哪这道题真的是神仙。。。 orz出题人 能出这种dp转移都写吐血的题目真的tql description: 给出n个时间段,可申请m次换课,每次换课可申请从c[i]c[i]c[i]换到d[i]d[i]d[i],并有k[i]k[i]k[i]的概率换课成功,每个教室有间距,问路程期望的最小值。 solution: 首先这就是一道期望dp题。 说到期望, https://45475.blog.luog...

ShineEternal的笔记小屋 450

洛谷 P1850 换教室 (Floyd + 期望dp)

题意 共有n节课,每节课有两间教室,分为初始教室和可申请教室,拥有m次申请换教室的机会,每次申请换教室时有ki的概率换成功,默认在初始教室上课。总共v间教室,教室间共有e条路径权值为w,求在m次机会内如何更换,使得总权值期望最小。 题解 首先对所有教室求一次Floyd,得到教室间最短路。 求dp[i][j][k] 其中i表示第i节课,j表示算上这一次一共申请了j次,k表示这节课是否申请。 dp[i...

qq_27693941的博客 159

[NOIP2016]换教室

Luogu1850 /* -------------------------------- dp[i][j][0/1] 表示走完前i个教室, 换了j次的最优方案,这一次换不换 其实换教室比不换教室是要多一重状态的,因为换教室总要牵扯“概率成功”的问题 由于要求期望体力值最小,所以转移的时候要取min --------------------------------2018.11.6 */ #inc...

weixin_30361641的博客 136

NSFZOJ #1064. && 洛谷 P1850【NOIP2016】换教室

洛谷 P1850【NOIP2016】换教室 NSFZOJ #1064. 【NOIP2016】换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。 在可以选择的课程中,有 2n2n2n 节课程安排在 nnn 个时间段上。在第 iii(1≤i≤n1 \leq i \leq n1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点

fz_xuzihan的博客 320

NOIP2016·洛谷·换教室

初见安~这里是传送门:洛谷P1850 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。 在可以选择的课程中,有2n2n节课程安排在nn个时间段上。在第ii(1 \leq i \leq n1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室c_ici​上课,而另一节课程在教室d_idi​进行。 在不...

樱狸✨愿携清风归来处 304
上一篇: [题目总结][动态规划] 更新ing
下一篇: [洛谷P2055]假期的宿舍
LOI_pingxing
博客等级 码龄10年 24粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值