P1850换教室 题解(概率dp)

题目:https://www.luogu.com.cn/problem/P1850

思路:

概率dp,如果要求最小路径期望,我们要确定的有选了几节课,申请换了几节课,最后一节是否申请换课(下一次选课要知道上一次选课申请情况)。

设f[k][i][j](k=0||k=1);k=0表示当前这节课不申请换教室,k=1申请换教室。

dis[i][j]从i到j距离;(用flord求任意两点最短距离);

c[i],d[i],k[i]和题意里相同含义;

如果当前这节课不申请,f[0][i][j]取值情况:

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]];

如果上节课不申请,第i个点到i-1点距离为dis[c[i]][c[i-1]],申请,可能路径有两条,dis[c[i]][d[i-1]],dis[c[i]][c[i-1]],求的是期望,所以相应的距离乘上相应概率;

如果这节课申请,f[1][i][j]取值情况:

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.0*dis[d[i]][c[i-1]]*k[i]*(1-k[i-1])+1.0*dis[d[i]][d[i-1]]*k[i]*k[i-1];

2.上节课不申请:f[0][i-1][j-1]+1.0*dis[d[i]][c[i-1]]*k[i]+1.0*dis[c[i]][c[i-1]]*(1-k[i]);

和上面分析一样,上节课申请,可能的路径有4条,不申请可能的路径有两条,乘上相应概率。

代码:

#include <iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
using namespace std;
#define LL long long 
const int N=2100;
const LL  MAX=1e15;
double eps=1e-8;
long double f[2][N][N];//上i节课,换j节课,所需体力总和最小期望值
int n,m,v,e;
LL  dis[310][310];
int c[N],d[N];
double k[N];
int main(){
    cin>>n>>m>>v>>e;
    for(int i=1;i<=n;i++) cin>>c[i];
    for(int i=1;i<=n;i++) cin>>d[i];
    for(int i=1;i<=n;i++) cin>>k[i];
    for(int i=1;i<=v;i++)
    for(int j=1;j<=v;j++)
    if(i!=j)
    dis[i][j]=1e7;         
    for(int i=1;i<=e;i++)
    {  int a,b,w;
        cin>>a>>b>>w;
        dis[a][b]=dis[b][a]=min(dis[a][b],(LL)w);
    }
    for(int o=1;o<=v;o++)
    for(int i=1;i<=v;i++)
    for(int j=1;j<=v;j++)
    dis[i][j]=min(dis[i][j],dis[i][o]+dis[o][j]);    
   for(int i=1;i<=n;i++)
   for(int j=0;j<=m;j++)
   f[0][i][j]=f[1][i][j]=1e7;
   f[0][1][0]=f[1][1][1]=0;
   for(int i=2;i<=n;i++)
   for(int j=0;j<=m&&j<=i;j++){
       //cout<<i<<" "<<j<<endl;
       f[0][i][j]=min(f[0][i-1][j]+dis[c[i]][c[i-1]],1.0*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]]);
       if(j>=1)
       f[1][i][j]=min(f[0][i-1][j-1]+1.0*dis[d[i]][c[i-1]]*k[i]+1.0*dis[c[i]][c[i-1]]*(1-k[i])
    ,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.0*dis[d[i]][c[i-1]]*k[i]*(1-k[i-1])+1.0*dis[d[i]][d[i-1]]*k[i]*k[i-1]);
   }
    long double ans=1e9;
    for(int i=0;i<=m;i++)
   ans=min(ans,min(f[0][n][i],f[1][n][i]));
   printf("%.2Lf\n",ans);
    return 0;
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小白学webgl合集-三维数据源和格式

大多数地图瓦片数据是二维的&#xff0c;三维效果通过渲染和样式设置实现。主要的三维数据源和格式包括&#xff1a; 1. 3D Tiles (CesiumJS) 3D Tiles 是一种开放标准&#xff0c;用于流式传输和可视化大规模三维地理数据。它可以包含各种三维数据&#xff0c;如建筑物、点云…

循环结构(二)——while语句【互三互三】

文章目录 &#x1f341;引言 &#x1f341;一、语句格式 &#x1f341;二、语句执行过程 &#x1f341;三、格式举例 &#x1f341;四、例题 &#x1f449;【例1】 &#x1f48e;【示例代码】 &#x1f449;【例2】 &#x1f680;【方法1】&#xff1a; &#x1f48e…

运维的操作红线

1. 无工单、邮件的任何操作&#xff0c;严禁执行。 2. 工单标题和内容不一致或工单内容超出现场范围禁止操作。 3. 操作前必须确定资产信息&#xff1a;机柜号、U位、资产号、sn 号、ip。 4. 机柜后门操作设备&#xff0c;必须多次执行第 3 条红线。 5. 严禁操作、触碰工单指定…

【Java伴学笔记】Day-02 变量|计算机的存储方式|数据类型|标识符|键盘输入流

一、变量 在Java中&#xff0c;变量用于存储数据值&#xff0c;可以是数字、文本或其他类型的信息。Java中的变量必须声明后才能使用&#xff0c;并且每个变量都有特定的类型。下面是一些基本的变量使用示例&#xff1a; 声明一个整型变量并赋值&#xff1a; int myNumber; …

企业如何选择渲染农场?渲染100邀请码1a12

渲染农场能降低企业成本&#xff0c;帮助企业更好的服务客户&#xff0c;那么如何选择渲染农场呢&#xff1f;又有什么标准&#xff1f;这次我们就来看下。 1、渲染性能 渲染性能是衡量农场优劣的重要指标&#xff0c;性能越好农场越优质&#xff0c;性能主要包括渲染速度、稳…

一文快速接入银行卡识别API

银行卡识别API 能通过机器学习和图像识别技术来解析银行卡相关信息&#xff0c;根据用户上传卡片自动识别内容&#xff0c;返回该卡的卡号、所属银行及银行类型等信息。可以在用户需要输入银行卡等相关信息时使用该功能&#xff0c;帮助用户快速输入正确信息&#xff0c;简化用…

VPX3U架构+GPU景嘉微:基于飞腾处理器的全国产化刀片式板卡

近期承接了客户一个全国产的VPX3U的项目。搭载的飞腾FT2000系列处理器的VPX3U板卡。服务于某某部门。这款产品拥有全国产化及自主可控的硬件技术。以下是基于飞腾FT2000处理器的VPX3U主板的一些特点&#xff1a; ①飞腾FT2000系列处理器 处理器&#xff1a;板卡兼容飞腾FT2000…

【触摸屏】【红十字会学习系统】功能模块:视频 + AI拍照合成

项目背景 提升公众急救能力&#xff1a;确保每个人都能在紧急情况下采取正确的急救措施&#xff0c;减少伤害&#xff0c;挽救生命。培养人道主义价值观&#xff1a;通过教育和培训&#xff0c;传播红十字精神&#xff0c;促进社会对弱势群体的关注与支持。建立社区响应网络&a…

java同步块介绍

在多线程编程中,同步块(synchronized block)用于保护代码块,使得同一时间只有一个线程能够执行该代码块,从而避免并发问题。同步块使用一个对象作为锁,确保在同步块内对共享资源的访问是线程安全的。 1. 什么是同步块? 同步块是 Java 中的一种同步机制,用于保护代码块…

【Linux】进程间通信(IPC)——匿名管道

目录 为什么要进行进程间通信&#xff1f; 匿名管道的具体实现 pipe创建内存级文件形成管道 pipe的简单使用 匿名管道的四种情况和五种特性 四种情况 五种特性 PIPE_BUF 命令行管道 | 功能代码&#xff1a;创建进程池 为什么要进行进程间通信&#xff1f; 1.数据传输&…

第五天安全笔记(持续更新)

第五天防御笔记 NAT种类&#xff1a; 静态NAT动态NATNapt 特点&#xff1a; 一对多----easy ip 多对多的napt 服务器的映射关系: 1.源NAT----基于IP地址进行转换&#xff0c;包括静态NAT&#xff0c;动态NAT&#xff0c;以及NAPT 2.目标NAT---基于目标IP地址进行转换&a…

[笔记.AI]AI Agent理解(LLM AI Agent)

前几天看到一个图&#xff0c;感觉能帮助理解 AI Agent 的基本思想和原理&#xff0c;特摘过来备忘。顺道加上自己目前对相关部分的理解&#xff0c;不一定对&#xff0c;权当做个记录。 另外&#xff0c;专门查了下图的来源&#xff0c;应该是源自 Lilian Weng 的博客文章《…

Android Studio启动报错:The emulator process for AVD Pixel_5_API_30 has terminated

Android Studio启动AVD报错&#xff1a; The emulator process for AVD Pixel_5_API_30 has terminated. 原因&#xff1a;安装时使用自定义安装后&#xff0c;修改了默认安装目录。 而avd文件默认在 C:\Users\用户名\.android 目录下。所以导致打开AVD时报错。 解决方法&am…

SadTalker数字人服务器部署

一、单独SadTalker部署 git clone https://github.com/OpenTalker/SadTalker.gitcd SadTalker conda create -n sadtalker python3.8conda activate sadtalkerpip install torch1.12.1cu113 torchvision0.13.1cu113 torchaudio0.12.1 --extra-index-url https://download.pyto…

切换node版本

一、在Linux上切换Node.js版本有多种实现方法&#xff1a; 1.使用nvm&#xff08;Node Version Manager&#xff09;&#xff1a; 安装nvm&#xff1a;可以通过curl或wget来安装nvm&#xff0c;具体请参考nvm的官方文档。 安装不同版本的Node.js&#xff1a;使用nvm可以轻松…

快速上手绿联私有云UGOS Pro系统Docker | 安装/部署/管理/docker-compose一网打尽

快速上手绿联私有云UGOS Pro系统Docker | 安装/部署/管理/docker-compose一网打尽 哈喽小伙伴们好&#xff0c;我是Stark-C~ 因为众所周知的原因&#xff0c;关于最新发布的绿联私有云UGOS Pro系统咱这里也不过多说&#xff0c;不过有一点不可否认&#xff1a;新系统专业性更…

用python写一个基于ai agent协同供应链管理流程的案例

要实现一个基于AI Agent的协同供应链管理流程&#xff0c;我们可以参考以下步骤&#xff1a; 1. 首先&#xff0c;定义一个类SupplyChainManager&#xff0c;用于模拟供应链管理系统的功能。 python class SupplyChainManager: def __init__(self): self.warehouse Warehous…

代码随想录第51天|单调栈

42. 接雨水 参考 思路1: 暴力解法 找每个柱子的左右高度超时 O(N^2) 思路2: 双指针优化 class Solution { public:int trap(vector<int>& height) {vector<int> lheight(height.size(), 0);vector<int> rheight(height.size(), 0);lheight[0] hei…

nginx的正向与反向代理

正向代理与反向代理的区别 虽然正向代理和反向代理都涉及代理服务器接收客户端请求并向服务端转发请求&#xff0c;但它们之间存在一些关键的区别&#xff1a; 正向代理&#xff1a; 在正向代理中&#xff0c;代理服务器代表客户端向服务器发送请求&#xff0c;并将服务…

ctfshow-web入门-php特性(web104-web108)

目录 1、web104 2、web105 3、web106 4、web107 5、web108 1、web104 需要传入的 v1 和 v2 进行 sha1 加密后相等。 解法1&#xff1a; 这里都没有判断 v1 和 v2 是否相等&#xff0c;我们直接传入同样的内容加密后肯定也一样。 ?v21 post&#xff1a; v11 拿到 flag…